簡體   English   中英

JPA \\ Hibernate OneToMany批注到底如何工作?

[英]How exactly work the JPA\Hibernate OneToMany annotation?

我正在研究Spring Core認證,並且發現有關如何在練習中使用JPA \\ Hibernate的某些疑問。

所以我有兩個分別名為T_ACCOUNTT_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_ACCOUNTT_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM