JPA休眠两个外键到同一个表
Posted
技术标签:
【中文标题】JPA休眠两个外键到同一个表【英文标题】:JPA Hibernate two foreign keys to the same table 【发布时间】:2015-12-18 08:01:47 【问题描述】:我找到了两个主题 this 和 this,但仍然无法将其填充到我的案例中。我有一个Account
。我可以从一个帐户到另一个帐户进行Payments
。为此,我想将payer_account_id
和receiver_account_id
存储在Payments
表中。如何使用注释映射它?
@Entity
public class Account
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Double balance;
//mapping here to Payments Entity
private ???
@Entity
public class Payments
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Double ammount;
//mapping here to Account Entity
private Account payerAccount;
//mapping here to Account Entity
private Account receiverAccount;
【问题讨论】:
对我来说,您似乎只需要常规的 onetomany/manytoone 映射。到目前为止没有什么特别的。 所以它们(当前)是单向关系,并且?如果您希望它们是双向的,那么您可以在另一侧添加 Payments 对象。没有发现问题 【参考方案1】:这似乎是一对多的关系。如果您想建立双向关系,请使用这些注释。
@Entity
public class Account
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Double balance;
@OneToMany(mappedBy="payerAccount", fetch = FetchType.EAGER)
private Collection<Payments> payers;
@OneToMany(mappedBy="receiverAccount", fetch = FetchType.EAGER)
private Collection<Payments> receivers;
/* GETTERS AND SETTERS */
@Entity
public class Payments
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Double ammount;
@ManyToOne
@JoinColumn(name="payer_account_id")
private Account payerAccount;
@ManyToOne
@JoinColumn(name="recever_account_id")
private Account receiverAccount;
/* GETTERS AND SETTERS */
在这段代码中,我使用 EAGER fetch,这意味着如果您有一个对象帐户,您的列表将自动填充。
希望对你有帮助。
【讨论】:
【参考方案2】:这个怎么样:
//mapping here to Account Entity
@ManyToOne
private Account payerAccount;
//mapping here to Account Entity
@ManyToOne
private Account receiverAccount;
【讨论】:
你能详细解释一下吗? “这个怎么样”听起来你不确定这是否能解决问题以上是关于JPA休眠两个外键到同一个表的主要内容,如果未能解决你的问题,请参考以下文章