【问题标题】:Multiple representation of child entity in parent entity父实体中子实体的多重表示
【发布时间】:2022-01-10 21:33:15
【问题描述】:

我很好奇在 JPA/Hibernate 的父实体中是否可以有多个 @ManyToOne 关系。

示例: 我有银行交易,每笔交易都有一个BankPartner担任CreditorDebtor两个角色。关键是,我只想编辑一次数据。昵称“情妇”的 BankPartner 只是其中之一 :),不管是债权人还是债务人。有一次会改名为老婆,不想单独改。此外,余额是 BankPartner 在这两个角色中的所有交易的总和。

@实体
公共类交易 { ..

@ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.ALL}, orphanRemoval=true, targetEntity = PartnerEntity.class)
@JoinColumn(name = "CREDITOR_ID")
私人BankPartner 债权人

@ManyToOne(fetch = FetchType.LAZY, targetEntity = PartnerEntity.class)
@JoinColumn(name = "DEBTOR_ID")
私人 BankPartner 债务人
..

}

@实体
公共类 BankPartner {
...
私有字符串名称;
私人字符串昵称;
私有字符串描述;
...
}

我可以想象,从“交易”方向可以以某种方式工作,但找不到从 BankPartner 方向工作的方法。

我可以看到两种不同的方法

  1. 在 BankPartner 和 Transaction 的交集表中使用“ROLE_TYPE”创建 @ManyToMany
  2. 从同一个表中创建两个单独的实体 Debtor 和 Creditor。

但是,正如我所说,我对第一种方法感到好奇..

【问题讨论】:

    标签: java hibernate spring-data-jpa


    【解决方案1】:

    您可以像这样使用多列连接:​​

    @Entity
    public class Transaction { 
    
    @ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.ALL}, orphanRemoval=true, targetEntity = PartnerEntity.class)
    @JoinColumns({
        @JoinColumn(name = "DEBTOR_ID"),
        @JoinColumn(name = "CREDITOR_ID")
    })
    private BankPartner partner
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 2017-10-31
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多