【发布时间】:2017-10-16 15:48:42
【问题描述】:
考虑以下实体映射:
public class Zip {
@ManyToOne
@JoinColumn(name = "country_code", referencedColumnName = "iso_code")
private Country country = null
@Column(name = "country_code")
private String countryCode;
...
}
像这样,JPA 实现会窒息说“country_code 的重复映射,其中只有一个可能被指定为可写”。
问:
为什么在此处/通常将关系设为只读 (private Country country) 而非将简单 ID 字段设为只读 (private String countryCode) ?
为什么一个在实践中比另一个更好(优点/缺点)?
我能想到的唯一事情是,当数据库不使用任何 FK 时,使用可写关系会更好,这会使使用实体变得有些强制性,但是,这不会阻止用户从能够将新实体插入到具有未知 ID 的数据库中,这只会使可写关系稍微安全一些。能够使用 ID 当然会使从数据库中加载完整的实体变得多余,这可能是一个很大的性能方面。
欢迎更多论据。
PS:我将 JPA 实现添加为标签以吸引更多观众。
【问题讨论】:
标签: hibernate jpa eclipselink openjpa datanucleus