Comme le dit le titre de la question, j'essaie de faire un critère de projection ne demandant que quelques-uns des attributs de la table. Donc, j'ai une table/classe de personne et il a environ 40 attributs. Je veux que mes critères pour obtenir le nombre dynamique d'attributs, disons 10, 11 ou 12 (termes SQL select firstname, lastname from person
) et je faisais comme ceci:Hibernate Criteria Projection
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;
et il Redonne que les retList
éléments ne sont pas de la Person.class
:
INFO [AWT-EventQueue-0] (UserGroupManagerApp.java127) - [Ljava.lang.Object; @ 14b9b80
FATAL [AWT-EventQueue-0] (Login.java78) - java.lang .ClassCastException: [Ljava.lang.Object; ne peut pas être converti en usergroupmanager.model.db.Person java.lang.ClassCastException: [Ljava.lang.Object; ne peut pas être jeté à usergroupmanager.model.db.Person
S'il vous plaît aider, pour l'instant je suis en répertoriant tous les attr de plus de 40, et il prend le temps et l'interrogation que je ne l'aime pas. Je cherche aussi une solution alternative qui m'aidera à résoudre ce problème. J'ai lu environ ResultTransformer
mais je n'ai pas trouvé comment l'utiliser dans mon cas.
Quelle est la définition de retList – Mark
Liste retList = null; au début, je l'ai testé avec des génériques maintenant Liste retList = nul et même chose –
Darwly