2016-06-01 8 views
1

Ich habe einen Fall wie folgt aus: Class Foo mit zwei Kindern (A und B), die jeweils Objects zu sein. In Hibernate, wenn ich nur eine Liste der Kinder zurückkehren wollen, würde ich Projektionen auf meine Kriterien verwenden:Hibernate Projektions Eigenschaft ganze Objekt

criteria.setProjection(Projections.property("A")); 

Dies mir eine Liste von A objects gibt, aber sie sind alle lazy geladen. Sobald ich versuche, auf etwas anderes als die id zuzugreifen, gehen offensichtlich Dinge schief. Meine SQL Abfrage in der Tat zeigt es:

select A from Foo ... 

Logisch, nur meine ID in gefüllt ist, und nicht den Rest meiner Eigenschaften. Wie löse ich dieses Problem, so bekomme ich eine Liste von A objects, die alles ausgefüllt haben? Ich habe versucht, dieses:

criteria.setResultTransformer(Transformers.aliasToBean(A.class)); 

Ohne Erfolg ....

+0

ist es notwendig, Kriterien zu verwenden ?? –

+0

Eigentlich nicht? Ich habe darüber nachgedacht, dies mit einer Hibernate-Abfrage zu tun :). –

Antwort

1

, wenn Sie verwenden hql es effizienter wäre:

String hql = "SELECT f.A FROM Foo f"; 
Query query = session.createQuery(hql); 
List results = query.list(); 

Mit Kriterien Ich würde

Verwendung diesen Code haben
Criteria crit = session.createCriteria(Foo.class); 
    ProjectionList proList = Projections.projectionList();  
    proList.add(Projections.property("A")); 
    crit.setProjection(proList); 
    List As= crit.list(); 

oder dieser Block

Criteria crit = session.createCriteria(Foo.class); 
crit.createAlias("A","a").setProjection(Projections.property("a")); 
List As= crit.list(); 
+0

Ich habe das Problem so gelöst. Ich habe mich gefragt, ob das mit Criteria möglich ist. –

+0

Ich habe meine Antwort aktualisiert –

Verwandte Themen