JPA休眠两个外键到同一个表

Posted

技术标签:

【中文标题】JPA休眠两个外键到同一个表【英文标题】:JPA Hibernate two foreign keys to the same table 【发布时间】:2015-12-18 08:01:47 【问题描述】:

我找到了两个主题 this 和 this,但仍然无法将其填充到我的案例中。我有一个Account。我可以从一个帐户到另一个帐户进行Payments。为此,我想将payer_account_idreceiver_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休眠两个外键到同一个表的主要内容,如果未能解决你的问题,请参考以下文章

EF6:导航属性外键到外键

Oracle系统表外键的更名

不同数据库中的两个表外键关系

SQLAlchemy 一个映射类中的多个外键到同一个主键

Ruby on Rails 有超过 1 个不同的列外键到同一个表

SQLite中的多对多链接表外键建模