我正在学习Spring Core认证,我发现了一些关于如何在练习中使用JPA \ Hibernate的内容。
所以我有2个数据库表名为relativelly 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 表:
@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>();
我知道,在数据库中,此关系是通过 T_ACCOUNT_BENEFICIARY 表的 ACCOUNT_ID 字段实现的(因此 T_ACCOUNT_BENEFICIARY 的多行> table可以与 ACCOUNT_ID 字段具有相同的值,这意味着 T_ACCOUNT 表的一行可以与 T_ACCOUNT_BENEFICIARY <的多行相关联/ strong> table)。
我的疑问是:在此字段映射中,我没有使用 @Column 注释,因为Beneficiary对象(表示 T_ACCOUNT_BENEFICIARY 表的单行)未表示为我的 T_ACCOUNT 表的字段(列)。因此,使用 @JoinColumn(name =“ACCOUNT_ID”)。
但JPA \ Hibernated如何知道什么是正确的表?我认为它必须自动查看如何注释受益人类。
它是否与其工作方式有关的正确解释?
TNX
答案 0 :(得分:0)
你走在正确的轨道上。您需要做的下一件事是使用@Entity
和@Table
注释来注释您的受益人类。然后hibernate会理解你要做的事情。您尚未发布您的受益人类别,因此我认为这是一种单向关系(即受益人没有@ManyToOne注释)。如果您想在域模型中指定双向关系,则需要在受益人类中添加@ManyToOne
注释mappedBy
,如下所示。
@Entity
@Table("T_ACCOUNT_BENEFICIARY")
public class Beneficiary {
@ManyToOne(mappedBy = "beneficiaries")
Account account;
...
}