【问题标题】:jpa one to many composite primary key mappingjpa 一对多复合主键映射
【发布时间】:2017-04-28 14:07:35
【问题描述】:

我有 2 个表如下:

TABLE_A
-------
A_SIREN
A_NDA

TABLE_B
-------
B_id    
B_NDA
B_SIREN

表A的id是COMPOSITE KEYSIREN/NDA

这是实体代码。

关键类

@Embeddable
public class SirenNdaKey implements Serializable {
  @Column(name = "A_SIREN")        
  protected String siren;
  @Column(name = "A_NDA")        
  protected String nda;
  // getters setters
}

表A

public class EntityA{

   @EmbeddedId  
   private SirenNdaKey sirenNda;

   @OneToMany(fetch = FetchType.LAZY)
      @PrimaryKeyJoinColumns({ @PrimaryKeyJoinColumn(name = "A_SIREN", 
    referencedColumnName = "B_SIREN"),
      @PrimaryKeyJoinColumn(name = "A_NDA", referencedColumnName = "B_NDA") 
    })
   private Set<EntityB> EntityBSet;
   ...
}

表 B

public class EntityB
    @Id
    private long id;
    @Column(name = "B_SIREN")
    private String siren;    
    @Column(name = "B_NDA")
    private String nda;
}

Hibernate 生成 3 个表:TABLE_A、TABLE_B 和包含 A_NDA、A_SIREN、B_ID 的关联表。如何只生成 2 个表。

我的目标是在不需要关联表的情况下从实体 A (entityA.getEntityBSet()) 中找到与同一对 SIREN/NDA 关联的实体 B 的列表,因为我的表是由外部批处理提供的。

entityA = entityARepository.findOne(new SirenNdaKey("nda_test1", "siren_test1"));
entityA.getEntityBSet()  // this list is always empty

【问题讨论】:

  • 你应该使用@JoinColumns而不是@PrimaryKeyJoinColumns
  • 谢谢@Alan Hay,这解决了我的问题

标签: java hibernate jpa one-to-many composite-key


【解决方案1】:

这是正确的源代码,我应该使用@JoinColumns 而不是@PrimaryKeyJoinColumns

public class EntityA{

   @EmbeddedId  
   private SirenNdaKey sirenNda;

   @OneToMany(fetch = FetchType.LAZY)
      @JoinColumns({ @JoinColumn(name = "B_SIREN", 
    referencedColumnName = "A_SIREN"),
      @JoinColumn(name = "B_NDA", referencedColumnName = "A_NDA") 
    })
   private Set<EntityB> EntityBSet;
   ...
}

【讨论】:

  • 我的最终解决方案
猜你喜欢
  • 2016-09-18
  • 2019-04-22
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2018-05-08
  • 2017-01-30
  • 2020-10-04
  • 2017-02-21
相关资源
最近更新 更多