[英]How exactly work the JPA\Hibernate OneToMany annotation?
我正在研究Spring Core認證,並且發現有關如何在練習中使用JPA \\ Hibernate的某些疑問。
所以我有兩個分別名為T_ACCOUNT和T_ACCOUNT_BENEFICIARY的數據庫表。
這些表具有以下結構:
create table T_ACCOUNT (ID integer identity primary key, NUMBER varchar(9), NAME varchar(50) not null, CREDIT_CARD varchar(16), unique(NUMBER));
create table T_ACCOUNT_BENEFICIARY (ID integer identity primary key, ACCOUNT_ID integer, NAME varchar(50), ALLOCATION_PERCENTAGE decimal(5,2) not null, SAVINGS decimal(8,2) not null, unique(ACCOUNT_ID, NAME));
T_ACCOUNT表以一對多關系綁定到T_ACCOUNT_BENEFICIARY表,這是圖形表示:
這是映射T_ACCOUNT表的Account類的代碼:
@Entity
@Table(name="T_ACCOUNT")
public class Account {
@Id
@GeneratedValue
@Column(name="id")
private Long entityId;
@Column(name="NUMBER")
private String number;
@Column(name="NAME")
private String name;
@OneToMany
@JoinColumn(name="ACCOUNT_ID")
private Set<Beneficiary> beneficiaries = new HashSet<Beneficiary>();
@Column(name="CREDIT_CARD")
private String creditCardNumber;
// GETTERS & SETTERS
}
因此,我對與此字段映射有關的問題感到懷疑,該字段映射處理T_ACCOUNT和T_ACCOUNT_BENEFICIARY表之間的一對多關系:
@OneToMany
@JoinColumn(name="ACCOUNT_ID")
private Set<Beneficiary> beneficiaries = new HashSet<Beneficiary>();
我知道,在DB,這種關系是由T_ACCOUNT_BENEFICIARY表(T_ACCOUNT_BENEFICIARY表可以有ACCOUNT_ID字段的值相同,這樣多行的ACCOUNT_ID領域實施,這意味着T_ACCOUNT表的單排可關聯到T_ACCOUNT_BENEFICIARY表的多個行)。
我的疑問是:在這個字段映射我沒有使用@Column批注,因為受益人的對象(即代表T_ACCOUNT_BENEFICIARY表中的單一行)不表示我T_ACCOUNT表的字段(列)。 因此,它使用@JoinColumn(name =“ ACCOUNT_ID”) 。
但是JPA \\ Hibernated如何知道正確的表是什么? 我認為必須自動查看如何對受益人類進行注釋。
是與它的工作原理相關的正確解釋嗎?
特納克斯
您走在正確的軌道上。 您需要做的下一件事是使用@Entity
和@Table
批注注釋您的受益人類。 然后休眠將了解您要執行的操作。 您尚未發布受益人類,因此我認為這是單向關系(即受益人沒有@ManyToOne注釋)。 如果你想指定你的域模型的雙向關系,你就需要把@ManyToOne
批注與mappedBy
在你的受益人類像下面。
@Entity
@Table("T_ACCOUNT_BENEFICIARY")
public class Beneficiary {
@ManyToOne(mappedBy = "beneficiaries")
Account account;
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.