Frage

Nun, wie die Frage Titel sagt, ich versuche, eine Projektionskriterien zu machen Abfragen nur einige der Tabellenattribute.

Also habe ich eine Person Tabelle / Klasse und es hat über 40 Attribute. Ich meine Kriterien wollen dynamischen Anzahl von Attributen zu bekommen, 10 können sagen, 11 oder 12 (SQL Begriffe select firstname, lastname from person) und ich tat es wie folgt aus:

Transaction tx = session.beginTransaction();
Criteria crit = session.createCriteria(Person.class);
crit.setCacheable(true);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("id"));
Criterias c = null;
 for (int i = 0; i < checked.size(); i++) {
        Attribute attr = checked.elementAt(i);
        switch (attr) {
            case LASTNAME:
                projList.add(Projections.property("lastName"));
                c = enumMap.get(attr);
                if (c.isChanged()) {
                    String tmp = (String) c.getAnswer();
                    tmp = tmp.replace('*', '%');
                    crit.add(Restrictions.like("lastName", tmp));
                    crit.addOrder(Order.asc("lastName"));
                }
            case ...THE REST .....
            }
    crit.setProjection(projList);
    retList = crit.list();
    tx.commit();
    return retList;

und es gibt wieder, dass die retList Elemente nicht aus dem Person.class:

INFO [AWT-Eventqueue-0] (UserGroupManagerApp.java127) - [Ljava.lang.Object; @ 14b9b80
Fatal [AWT-Eventqueue-0] (Login.java78) - java.lang.ClassCastException: [Ljava.lang.Object; kann nicht auf usergroupmanager.model.db.Person gegossen werden java.lang.ClassCastException: [Ljava.lang.Object; kann nicht auf usergroupmanager.model.db.Person gegossen werden

Bitte Hilfe, denn jetzt bin ich die Auflistung all 40+ attr, und es dauert Zeit abfragen und ich weiß nicht wie es. Ich suche auch eine alternative Lösung, die mir dieses Problem lösen helfen. Ich las über ResultTransformer aber havent gefunden, wie es in meinem Fall zu verwenden.

War es hilfreich?

Lösung

[Ljava.lang.Object; kann nicht gegossen werden usergroupmanager.model.db.Person

Says in sauberen Worten Object[] kann nicht auf Person gegossen werden. Wenn Sie eine Projektion zu tun, erhalten Sie die Attribute, die Sie als ein Array von Objekten statt einer hydrierten Einheit ausgewählt.

Ihr Code fehlt die Deklaration von retlist. Ich denke, es ist eine rohe List, die Sie zu einem List<Person> irgendwo werfen. ersetzen, die nur mit List<Object[]>.

scroll top