[英]JPA @SecondaryTable foreign key violation
我想以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;
}
事情是,为了添加我必须删除A_B
表上的foreign key
。 如何解决映射以允许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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.