2015-09-08 12 views
2

我有兩個實體SellBuy,每個實體都有一個列表Offer,如下所示。在兩個實體中映射相同的列表並使用彈簧數據更新列表

我的疑問是如何映射這兩個實體在Offer。我是否必須爲每個人添加一個帶有@ManyToOne註釋的屬性?我目前的映射是否正確?

此外,當我向要約列表添加新元素時,如何使用Spring Data更新它? 我正在使用存儲庫JpaRepository,但沒有找到更新或合併bean的方法。

賣實體:

@Entity 
public class Sell implements Serializable { 

    @Id 
    @GeneratedValue(generator = "sell_sequence", strategy = GenerationType.SEQUENCE) 
    @SequenceGenerator(name = "sell_sequence", sequenceName = "sell_sequence", allocationSize = 1) 
    private Long id; 

    // other fields... 

    @OneToMany(cascade = { CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST }) 
    @JoinTable(name = "selloffer", 
     joinColumns = @JoinColumn(name = "sell_id", referencedColumnName = "id"), 
     inverseJoinColumns = @JoinColumn(name = "offer_id", referencedColumnName = "id")) 
    private List<Offer> offers = new ArrayList<>(); 

    // constructors, getters and setters... 
} 

購買實體:

@Entity 
public class Buy implements Serializable { 

    @Id 
    @GeneratedValue(generator = "buy_sequence", strategy = GenerationType.SEQUENCE) 
    @SequenceGenerator(name = "buy_sequence", sequenceName = "buy_sequence", allocationSize = 1) 
    private Long id; 

    // other fields... 

    @OneToMany(cascade = { CascadeType.REMOVE }) 
    @JoinTable(name = "buyoffer", 
     joinColumns = @JoinColumn(name = "buy_id", referencedColumnName = "id"), 
     inverseJoinColumns = @JoinColumn(name = "offer_id", referencedColumnName = "id")) 
    private List<Offer> offers; 

    // constructors, getters and setters... 
} 

及發售:

@Entity 
public class Offer implements Serializable { 

    @Id 
    @GeneratedValue(generator = "offer_sequence", strategy = GenerationType.SEQUENCE) 
    @SequenceGenerator(name = "offer_sequence", sequenceName = "offer_sequence", allocationSize = 1) 
    private Long id; 

    @Column(length = 500) 
    String description; 

    @ManyToOne(cascade = { CascadeType.PERSIST }) 
    @JoinColumn(name = "bidder_id", nullable = false) 
    User bidder; 
} 
+1

爲什麼在OneToMany Reation上使用連接表?這些應該只是ManyToMany關係需要 –

+0

我認爲有必要創建中間表「buyoffer」和「selloffer」。雖然我不確定這是否正確。 –

+0

所以每個offer只有1個Buy and Sell實例? –

回答

1

雖然我猜測,你的關係應該是OneToOne(或者多對一全無連接表),沒有連接表,這似乎可以解決你的問題,只需檢查報價中的連接列即可類(不知道它們是否適合您的情況)

@Entity 
public class Sell implements Serializable { 

    @Id 
    @GeneratedValue(generator = "sell_sequence", strategy = GenerationType.SEQUENCE) 
    @SequenceGenerator(name = "sell_sequence", sequenceName = "sell_sequence", allocationSize = 1) 
    private Long id; 

    // other fields... 

    @OneToMany(cascade = { CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST },mappedBy = "sell") 

    private List<Offer> offers = new ArrayList<>(); 

    // constructors, getters and setters... 
} 

@Entity 
public class Buy implements Serializable { 

    @Id 
    @GeneratedValue(generator = "buy_sequence", strategy = GenerationType.SEQUENCE) 
    @SequenceGenerator(name = "buy_sequence", sequenceName = "buy_sequence", allocationSize = 1) 
    private Long id; 

    // other fields... 

    @OneToMany(cascade = { CascadeType.REMOVE },mappedBy = "buy") 
    private List<Offer> offers; 

    // constructors, getters and setters... 
} 

@Entity 
public class Offer implements Serializable { 

    @Id 
    @GeneratedValue(generator = "offer_sequence", strategy = GenerationType.SEQUENCE) 
    @SequenceGenerator(name = "offer_sequence", sequenceName = "offer_sequence", allocationSize = 1) 
    private Long id; 

    @Column(length = 500) 
    String description; 

    @ManyToOne(cascade = { CascadeType.PERSIST }) 
    @JoinColumn(name = "bidder_id", nullable = false) 
    User bidder; 

    @ManyToOne 
    @JoinTable(name = "selloffer", 
     joinColumns = @JoinColumn(name = "offer_id", referencedColumnName = "id"), 
     inverseJoinColumns [email protected](name = "sell_id", referencedColumnName = "id")) 
    private Sell sell; 

    @ManyToOne 
    @JoinTable(name = "buyoffer", 
     joinColumns = @JoinColumn(name = "offer_id", referencedColumnName = "id"), 
     inverseJoinColumns = @JoinColumn(name = "buy_id", referencedColumnName = "id")) 
    private Buy buy; 
} 
+0

雖然我改變了這個解決方案,有兩個不同的實體,一個SellOffer和一個BuyOffer,所以我將有兩個表,而不是一個空值。謝謝。 –

相關問題