2010-12-10 5 views
1

Ich habe zwei Entitäten ...Hibernate findByExample mit nicht-primitiven Mitgliedern

Datei und Benutzer

Datei hat einen @ManyToOne Verweis auf Benutzer mit folgenden Anmerkung auf dem Mitglied:

@ManyToOne 
@JoinColumn(name="user_id") 
private User user 

Ich versuche, alle Dateien für einen Benutzer mithilfe der Methode "findByExample" zu finden.

Ich habe eine Instanz von Datei und eine Instanz von Benutzer (mit dem Benutzernamen) erstellt. Ich habe die Instanz von Benutzer auf die Datei-Instanz hinzugefügt und gab es „findByExample“ wie folgt aus:

Criteria crit = getSession().createCriteria(File.class); 
Example ex = Example.create(exampleInstance); 
crit.add(ex); 
return crit.list(); 

Leider „-Liste()“ gibt alle Dateien in meinem db, nicht nur die, die für den angegebenen Benutzer. Ich habe das generierte SQL inspiziert und sehe, dass es das User-Objekt nicht auf irgendwelche Werte hin untersucht, sondern einfach die Tabellen verbindet und ein "where (1 = 1)" tut.

Ist es möglich, dass Hibernate nicht-primitive Mitglieder bei einer "findByExample" -Abfrage nicht überprüft?

Antwort

1

Eine alte ERLEDIGEN in org.hibernate.criterion.Example Klasse Linie 207 erklärt dieses Problem:

//TODO: get all properties, not just the fetched ones! 
Object[] propertyValues = meta.getPropertyValues(entity, getEntityMode(criteria, criteriaQuery)); 

war meine Abhilfe eine Criteria mit dem Beispielobjekt definieren (die ursprünglichen Frage folgenden):

Criteria crit = getSession().createCriteria(File.class); 
Example ex = Example.create(exampleInstance); 
crit.add(ex).add(Restrictions.eq("user", exampleInstance.getUser())); 
return crit.list(); 
Verwandte Themen