我正在阅读this本书。在解释“@OneToOne unidirectional”时,作者采用了以下Customer
,Address
示例:
@Entity
public class Customer{
@Id @GeneratedValue
private Long id;
private String name;
private Address address;
//few other columns, getters/setters
}
@Entity
public class Address{
@Id @GeneratedValue
private Long id;
private String city;
//few other columns, getters/setters
}
并且说 -
然后关于这个:
@Entity
public class Customer {
@Id @GeneratedValue
private Long id;
private String name;
@OneToOne
@JoinColumn(name="ADD_FK")
private Address address;
//few other columns, getters/setters
}
@Entity
public class Order {
....
List<OrderLine> orderLines;
...
}
我的问题:
以上陈述是否有效?因为当我在Hibernate上尝试这些例子时,我得到了例外。
这些陈述是否按照JPA制定 标准
请澄清。
答案 0 :(得分:4)
据我所知,实体之间的关系必须显式映射。从JPA 1.0规范(粗体是我的):
2.1.7实体关系
实体之间的关系可能是 一对一,一对多,多对一, 或多对多。关系是 多态的。
如果两者之间存在关联 实体,以下之一 关系建模注释 必须应用于相应的持久属性或 引用实体的字段:
OneToOne
,OneToMany
,ManyToOne
,ManyToMany
。对于那些做的协会 不指定目标类型(例如, 其中未使用Java泛型类型 对于收藏品),有必要 指定作为目标的实体 关系。(...)
这在JPA 2.0中没有改变。
因此我注释了实体之间的关系。而AFAIK,Hibernate确实会抱怨在不这样做时无法坚持复杂类型。
但除非有人能告诉我规范的相关部分,否则我认为这种行为是正确的。