JPA Composite-Primärschlüssel [duplizieren]

9

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:

%Vor%

Aber dies erzeugt Folgendes für die Tabelle PRICE :

%Vor%

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.

    
Dónal 23.06.2011, 07:35
quelle

2 Antworten

4

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:

    
danny.lesnik 23.06.2011, 07:59
quelle
0

Da Sie @IdClass verwenden, muss die Klasse PricePK nicht mit der Annotation @Embeddable markiert sein. Ein Beispiel ist in Ссылка

angegeben

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)

%Vor%     
Dilini Rajapaksha 23.06.2011 08:21
quelle