Ich versuche, das gleiche Problem zu implementieren, wie hier vor einigen Jahren erwähnt: Hibernate many to many with a composite key with one field shared on either side of the relationshipHibernate ManyToMany Beziehung mit gemeinsamem Fremdschlüssel
ich ein Menü und eine Item-Klasse und eine unidirektionale Beziehung implementieren mag, dass ein Menü alle spart die Artikel, die es enthält.
Menu and Item both have composite keys out of the merchant_id foreign key and an auto incremental itemId/menuId. (EER-Diagramm Bild)
Da Hibernate das Auto nicht abrufen kann Id erzeugt wird, wenn ich einen zusammengesetzten Schlüssel deklarieren und die Id ist einzigartig in dem System, speichere ich die Entitäten ohne zusätzlichen 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
Wie Sie aus dem kommentierten Code sehen können, hier ist der Punkt, meine Frage kommt waren. Wie ordne ich die Entitäten jetzt die beste w ohne meine normalisierte Datenbanktabelle zu ändern? (Sie müssen die gleichen Händler haben in der Datenbank validiert werden)
können Sie zeigen, ' MENU_ITEM' Fremdschlüssel? –