Ich habe die folgenden Klassen in meinem JPA-Modell (Getter, Setter und irrelevante Felder wurden weggelassen):
%Vor% Ich muss eine Klasse definieren Price
, so dass, wenn die DDL aus den Klassen generiert wird , besteht der Primärschlüssel der entsprechenden Tabelle aus den Schlüsseln für Product
und Currency
. Ich habe Folgendes versucht:
Aber dies erzeugt Folgendes für die Tabelle PRICE
:
Beachten Sie, dass sowohl currency_id
als auch product_id
Nullwerte enthalten können, was den folgenden Fehler verursacht, wenn ich versuche, die DDL in SQL Server zu laden
Die PRIMARY KEY-Einschränkung für die Spalte "NULL" in der Tabelle "PRICE"
kann nicht definiert werden
Ich verstehe nicht, warum diese NULL-Werte zulässig sind, weil sie im Domänenmodell mit Anmerkungen versehen sind
@ManyToOne(optional = false)
Die DDL wird mit dem org.hibernate.dialect.SQLServerDialect
SQL-Dialekt generiert.
Kürzlich habe ich eine ManyToMany-Beziehung erstellt, bei der der Composite-Primärschlüssel und die Annotation als bidirektionale @OneToMany
verwendet wurden. Dieser Code funktioniert einwandfrei. Vielleicht wird es helfen:
Kartierung von ManyToMany mit zusammengesetztem Primärschlüssel und Annotation:
Da Sie @IdClass
verwenden, muss die Klasse PricePK
nicht mit der Annotation @Embeddable
markiert sein. Ein Beispiel ist in Ссылка
Ich habe Ihren Code ausprobiert, indem ich die Klasse @Embeddable
für PricePK
und die Preistabelle, die in der MYSQL-Datenbank mit Feldern ohne Null generiert wurde, lösche.
Im Folgenden können Sie @EmbeddedId
verwenden, um das gewünschte Ergebnis zu erzielen:
(Getters und Setter weggelassen)
Tags und Links java jpa sql-server hibernate maven-2