我嘗試實施若干年前這裏提到了同樣的問題: Hibernate many to many with a composite key with one field shared on either side of the relationshipHibernate的多對多關係與共同的外交重點
我有一個菜單和項目類和要實現的單向關係,一個菜單保存所有它包含的項目。
因爲Hibernate無法檢索自動生成的ID,當我宣佈複合鍵和ID是系統中唯一的,我救實體無需額外embeddedId PKClass:
@Entity
@Table(name="ITEM")
public class Item extends AbstractTimestampEntity{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="itemId", nullable=false)
private long itemId;
@ManyToOne
@JoinColumn(name="merchantId", nullable=false)
private Merchant merchant;
@Column(name="name", length=45)
private String name;
@Column(name="description" , length=200)
private String description;
@Column(name="price")
private double price;
public Item(){} // getters & setters
@Entity
@Table(name="MENU")
public class Menu {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="menuId", nullable=false)
private long menuId;
@ManyToOne
@JoinColumn(name="merchantId", nullable=false)
private Merchant merchant;
@Column(name="name", length=45)
private String name;
@ManyToMany
@JoinTable(name="MENU_ITEM", joinColumns = {
@JoinColumn(name="menuId", nullable=false, updatable=false)},
//@JoinColumn(name="merchant.merchantId", nullable=false, updatable=false)},
inverseJoinColumns = { @JoinColumn(name="itemId", nullable=false, updatable=false)})
// @JoinColumn(name="merchantId", nullable=false, updatable=false)})
private List<Item> items = new ArrayList<Item>(); // constructor, getters & setters
你可以從註釋的代碼看,這裏是點是我的問題的用武之地,如何將實體映射現在最好w ^沒有修改我的規範化數據庫表? (他們需要具有相同的商戶數據庫進行驗證)
可以顯示' MENU_ITEM'外鍵? –