簡體   English   中英

JPA @SecondaryTable外鍵違規

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM