gpt4 book ai didi

java - JPA @SecondaryTable 外键违规

转载 作者:行者123 更新时间:2023-12-02 07:30:00 24 4
gpt4 key购买 nike

我想映射 one to many 中的两个实体时尚。

A->[B, B]

我想添加到 join table更多领域。 Pojos看起来像:

@Entity
@Table(name = "A", schema = "examples")
@SecondaryTable(name = "A_B", pkJoinColumns = @PrimaryKeyJoinColumn(name = "a_id", referencedColumnName = "id"))
public class A
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

@Basic
private String name;

@Basic
private Integer field1;

@Column(table = "A_B", name = "field2")
private Integer field2;

@OneToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "A_B", joinColumns = {@JoinColumn(name = "a_id")}, inverseJoinColumns = {@JoinColumn(name = "b_id")})
private List<B> datastores;
}


@Entity
@Table(name = "B", schema = "examples")
@SecondaryTable(name = "A_B", pkJoinColumns = @PrimaryKeyJoinColumn(name = "b_id", referencedColumnName = "id"))
public class B
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;


@Basic
private String field1;

@Basic
private int field2;

@Column(table = "A_B", name = "field3")
private int field3;
}

事实是,为了添加我必须删除 foreign keyA_B table 。如何解决映射以允许 foreign keys

谢谢。

最佳答案

我遗漏了一些东西,但我不明白为什么实体 A 和实体 B 都映射到表“A_B”。通过将其作为辅助表添加到实体 A,您可以声明每次对表 a 进行插入时,也必须对表 A_B 进行插入 - 在两个表中的行之间创建严格的 1:1 关系。除了对实体 B 执行相同的操作外,最终将在 A_B 中得到 A_id=somevalue 和 B_id= null 的行,以及其他 a_id=null 而 b_id=somevalue 的行。表“A_B”看起来像一个关系表,所以这可能不是您想要的。

如果 A_B 是一个关系表,您应该使用 ManyToMany 来映射它,就像“A_B”表一样。如果有额外的字段需要填充,请创建一个AB实体,并从A->AB和B->AB创建OneToMany,以及从AB->A和AB->B创建ManyToOne。

关于java - JPA @SecondaryTable 外键违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13035745/

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