Wie erhalte ich den Fremdschlüsselspaltenwert einer abhängigen Hibernate-Entität, ohne die vollständige Entität abzurufen?

9

Ich kämpfe mit einem Problem, das viel zu einfach erscheint:

Setup ist zwei Entitäten mit einer Viele-zu-Eins-Beziehung in Hibernate 3:

%Vor%

Einfach genug. In meiner Anwendung habe ich eine Liste von M s, die entweder N haben oder nicht. Diese Liste ist die Eingabe für eine h:dataTable , die einen unterschiedlichen Spalteninhalt zeigt, abhängig davon, ob der FK null ist oder nicht. Aber wenn ich m.getN() != null teste, lädt Hibernate N . Wie kann ich das vermeiden?

Bearbeiten : Dies ist tatsächlich ein Fehler von mir, wie JBNizet in den Kommentaren darauf hingewiesen hat. Um es zumindest für jemanden nützlich zu machen und mit dem obigen Layout fortzufahren, habe ich die Frage zu "Wie erhalte ich den Fremdschlüsselspaltenwert einer abhängigen Hibernate-Entität, ohne die vollständige Entität abzurufen" umformuliert. wie von Aaron Digulla vorgeschlagen.

Bearbeiten 2 : Es stellt sich heraus, dass die neue Frage ein Duplikat ist: Wie kann ich Hibernate verhindern, dass verbundene Entitäten nur auf die Fremdschlüssel-ID zugreifen? - also, schließen abstimmen?

    
mabi 02.08.2012, 11:29
quelle

2 Antworten

1

Erstellen Sie ein Projektions-Mapping, das M oder mehrere Felder von M enthält und z. ID von N

Ihre Abfrage könnte wie

aussehen

select new com.my.ProjectionObject(m, m.n.id) from M m where ...

    
Piotr Gwiazda 02.08.2012 11:39
quelle
-1

Wie kannst du erwarten, dass Hibernate dir etwas sagt, was es nicht weiß? Ohne das Objekt zu laden, kann Hibernate nicht wissen, ob es (noch) existiert.

Wenn Sie die Box "Entity Mapper" von Hibernate verlassen, können Sie die Datenbank direkt abfragen und z. B. die Anzahl von N s für Ihre M zählen.

    
Aaron Digulla 02.08.2012 11:41
quelle

Tags und Links