gpt4 book ai didi

java - jpa一对多复合主键映射

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:36 26 4
gpt4 key购买 nike

我有 2 个表如下:

TABLE_A
-------
A_SIREN
A_NDA

TABLE_B
-------
B_id
B_NDA
B_SIREN

表A的id是一个COMPOSITE KEY SIREN/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

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;
...
}

关于java - jpa一对多复合主键映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43682217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com