Sollte Hibernate überlappende Fremdschlüssel verarbeiten können?

7

Ich habe eine Tabelle mit zwei Fremdschlüsseln für zwei verschiedene Tabellen, wobei beide Fremdschlüssel eine Spalte teilen :

%Vor%

Wie Sie sehen können, gibt es zwei FKs, die country_code teilen (zufälligerweise auf dieselbe Spalte am Ende des Referentiationspfads verweisen). Die Entitätsklasse sieht wie folgt aus (JPA 1.0 @IdClass):

%Vor%

Wie Sie sehen können, habe ich die countryCode-Eigenschaft und den country_code @JoinColumn der Stadt als schreibgeschützt gekennzeichnet (einfügbar = false, update = false). Hibernate schlägt mit diesem Spruch fehl:

%Vor%

Das sieht für mich ehrlich gesagt ziemlich einfach aus. "Mischen von einschiebbaren und nicht einschiebbaren Spalten in einer Eigenschaft ist nicht erlaubt" ist solch eine schwache "Entschuldigung", nicht wahr?

Sollte Hibernate in der Lage sein, dies zu handhaben, z.B. nach der JPA-Spezifikation? Ist das ein Fehler?

    
Kawu 20.11.2010, 06:01
quelle

4 Antworten

9

Wird mit Hibernate 5 unterstützt, siehe Ссылка

    
Kawu 05.03.2012, 14:01
quelle
18

Es gibt eine Möglichkeit, die Validierung zu umgehen und sie zum Laufen zu bringen. Sie geben also an, dass die Spalte ein "@JoinColumnsOrFormulas" ist, und setzen Sie dann die Lösung:

Fehler:

%Vor%

OK:

%Vor%

Grüße,

    
Manu Navarro 30.10.2012 20:48
quelle
0

Ich benutze Hibernate 5 und ich bekomme immer noch die Ausnahme. Wenn Sie insert="false", update="false" nur auf eins setzen, erhalten Sie eine Ausnahme, die besagt, dass Sie mischbare und nicht einfügbare Spalten gemischt haben und dass dies nicht erlaubt ist. Dies ist ein Problem, das sich bereits im Tracker befindet, jedoch nicht behoben werden kann. Hibernate löst AnnotationException in der Spalte aus, die von mehreren überlappenden Fremdschlüsseln verwendet wird

In unserem Fall bedeutete dies, dass wir nach EclipseLink migrierten, was in der Tat ziemlich einfach ist, da Sie hauptsächlich die persistence.xml ersetzen und den HSQL (Hibernate SQL) in JPQL (JPA SQL) umschreiben müssen. Außerdem müssen Sie möglicherweise benutzerdefinierte Benennungsstrategien ersetzen (Eclipse ruft sie als SessionCustomizer auf). Natürlich könnte es schwieriger sein, wenn Sie spezielle Funktionen des Winterschlafs verwenden, wie zum Beispiel die Suche im Ruhezustand usw. Aber in unserem Fall haben wir versucht, überlappende Fremdschlüssel wochenlang zu reparieren, als die Migration am Ende nur Stunden dauerte.

    
Ben 07.07.2016 14:27
quelle
0

Dies ist immer noch nicht in Hibernate 5 gelöst. Wenn ich jedoch @JoinColumnsOrFormulas verwende, bekomme ich ClassCastException. Das Anhängen von insertable = false, updatable = false an alle Join-Spalten löste mein Problem:

Beispiel:

%Vor%     
suomi-dev 15.11.2017 18:32
quelle