[英]JPA direction of entity relationships
我是JPA的新手,在理解“實體關系方向”概念時遇到一些困難,如下所述:
http://docs.oracle.com/javaee/7/tutorial/doc/persistence-intro001.htm#BNBQI
是在設計實體時選擇單向性還是雙向性,還是由數據庫模式提供? 就像在順序應用程序( http://docs.oracle.com/javaee/7/tutorial/doc/persistence-basicexamples001.htm ),你能不能例如設計它,以便lineitem
知道哪些訂單是屬於,但order
不知道它有哪些order
?
您可以通過在實體上包括的字段和注釋來確定關系是單向還是雙向。
單向
@Entity
public class Parent(){
@OneToMany
private List<Child> children;
}
@Entity
public class Child(){
}
雙向
@Entity
public class Parent(){
@OneToMany
private List<Child> children;
}
@Entity
public class Child(){
@ManyToOne
@JoinColumn
private Parent parent;
}
如您所見, 單向關系不允許子級訪問父級,而雙向關系則允許父級訪問。 該鏈接是通過將注釋字段添加到父類型的子對象來創建的,並且是完全可選的。 它歸結為一個設計決策。
當然,數據庫必須支持該關系,這意味着將建立適當的主鍵/外鍵來鏈接表,但是數據庫中不需要任何特殊的東西。
那取決於你的要求
Unidirectional
@Entity
@AutoProperty
public class OneToOneUnidirectionalA implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@OneToOne
private OneToOneUnidirectionalB b;
private String s;
// Setters, Getters, Constructors, Pojomatic...
}
@Entity
@AutoProperty
public class OneToOneUnidirectionalB implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
// No reference to OneToOneUnidirectionalA
// since this is a unidirectional relationship
private String s;
// Setters, Getters, Constructors, Pojomatic...
}
雙向A擁有該關系。 我們還需要避免Pojomatic循環引用問題:
@Entity
@AutoProperty
public class OneToOneBidirectionalA implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Property(policy=PojomaticPolicy.NONE)
@OneToOne
private OneToOneBidirectionalB b;
// Setters, Getters, Constructors, Pojomatic...
}
@Entity
@AutoProperty
public class OneToOneBidirectionalB implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Property(policy=PojomaticPolicy.NONE)
@OneToOne(mappedBy="b")
private OneToOneBidirectionalA a;
// Setters, Getters, Constructors, Pojomatic...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.