Hibernate Projektionen Liste
Ich ned, um nur ein paar der Spalte Werte aus der Tabelle. So habe ich verwendet Projektionen, dies zu erreichen. Der code funktioniert, aber ich glaube nicht, dass es wirksam ist.
Mein Problem war wenn ich ProjectionsList & legen Sie dann die Kriterien.Liste eine ArrayList - die Bulletin-Objekt null ist. Ich bin mir nicht sicher, wie dies zu erklären besser. Also werde ich den code, und dann Lesen Sie bitte unten:
List<Bulletin> list = new ArrayList<Bulletin>();
BulletinList bulletinList = null;
Criteria criteria = null;
criteria = this.getSession().createCriteria(Bulletin.class)
.setProjection(Projections.projectionList()
.add(Projections.property(bulletinIdAttr))
.add(Projections.property(docNameAttr))
.add(Projections.property(docTypeCodeAttr))
);
criteria.addOrder(Order.desc(createdTimeAttr));
List<Object> rows = criteria.list();
for (Object r : rows) {
Object[] row = (Object[]) r;
Bulletin bull = new Bulletin();
bull.setBulletinId((Long) row[0]);
bull.setDocumentName((String) row[1]);
bull.setDocumentTypeCode((String) row[2]);
list.add(bull);
}
bulletinList = new BulletinList();
bulletinList.setBulletins(list);
return bulletinList;
Brauche ich nur den festgelegten Kriterien.Liste BulletinList (Klasse enthält eine Liste mit Bulletin-Objekte). Aber wenn ich Projektionen, Bulletin-Objekt null ist.
Ich war auch zu Lesen, einen weiteren thread zu verwenden
setResultTransformer(Transformers.aliasToBean
Aber, dass ain ' T arbeiten entweder. So kann jemand dabei helfen wie man den code besser.
Dank
Harish
InformationsquelleAutor Harry | 2012-06-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Projections.property()
nimmt einen String als argument. In dem code, den Sie, sofern der Wert dieser Zeichenfolge sollte den Namen von einem Mitglied der Bulletin-Klasse. VermutlichbulletinIdAttr
, zum Beispiel, ist eine Zeichenfolge, die mit einem solchen Wert, sonst würden Sie sich von Laufzeitfehlern.Beim Aufruf
setProjection
auf ein Kriterien-Instanz, die Sie implizit die Einstellung der ResultTransformer zuPROJECTIONS
und das ist, was Sie wollen. Keine Notwendigkeit zu nennensetResultTransformer
selbst. Ich würde vereinfachen die routine ein wenig soAber das sollte keinen Unterschied machen, um Ihr Ergebnis. Haben Sie überprüft, dass
rows
leer ist?Type mismatch: cannot convert from-element-Typ Object, Object[] in Zeile for (Object[] Zeile : Zeilen). Was vermisse ich hier? Bitte lassen Sie uns wissen.
Sorry, Harish, meine ursprüngliche Antwort war falsch formatiert, was die Erklärung der Zeilen falsch. Es sollte so funktionieren, wie es jetzt ist.
Dies funktioniert sehr gut. Vielen Dank. Aber können Sie wissen lassen, die diff. der mit List<Object[]> vs-Liste<Object> & warum dies besser ist.
Es wohl nicht viel Unterschied, sobald es kompiliert ist. Aber der code wird klarer, wenn Sie die Umwandlung das ResultSet einmal anstatt zweimal. (Einmal als Objekt und einmal pro Zeile als Object[]).
InformationsquelleAutor carbontax
Können Sie
Hier Kriterien.setResultTransformer(neue AliasToBeanResultTransformer(Bulletin.class)) verwandeln Sie Ihr Ergebnis in die gewünschte POJO Klasse, aber stellen Sie sicher, dass Ihre POJO-Klasse( Bulletin.class in deinem Fall) sollten über die entsprechenden Set-Methoden zum setzen der Werte von Eigenschaften.
Nun Kriterien.list() gibt die Liste der Bulletin-POJO-Klasse statt Objekt.
das problem war, steckte meinen Weg, viele Tage, ich kann nicht tun, erhalten Sie alle details der Immobilie mit Projektionen.projectionList(), aber jetzt habe ich ausgeführt, wie mein Projekt auf diese Weise verwendete, wirklich vielen Dank sir @Shiva Agrawal
InformationsquelleAutor Shiva Agrawal
Wenn Sie wollen, um eine zweite Suche mit den gleichen Kriterien, die Sie ändern oder entfernen Sie die Projektion. Zum Beispiel, wenn Sie suchen, für die zählen zunächst:
und wollen dann Holen alle Objekte:
InformationsquelleAutor krystine.e