Hibernate mit ProjectionList Fehler: kann nicht sein, cast to [Ljava.lang.Objekt;
Problem habe ich mit returnig Liste meiner Objekte. Ich arbeite mit entity-Klasse, die hat @EmbeddedId
wie Sie sehen können in meinem code unten, dort sind zwei Zeilen mit ähnlichem text: id.*
.
Criteria cr = createCriteria(true);
cr.add(Restrictions.eq("id.qwerty", "QWERTY"));
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("id.qwerty"));
projectionList.add(Projections.property("text"));
projectionList.add(Projections.property("id.property"));
cr.setProjection(projectionList);
cr.setResultTransformer(Transformers.aliasToBean(My.class));
List<My> myList = (List<My>) cr.list();
return myList;
In Zeile List<My> messagesList = (List<My>) cr.list();
die unten Fehler aufgetreten ist.
java.lang.ClassCastException: my.package.dao.domain.My cannot be cast to [Ljava.lang.Object;
at org.hibernate.cache.StandardQueryCache.put(StandardQueryCache.java:104)
at org.hibernate.loader.Loader.putResultInQueryCache(Loader.java:2274)
at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2206)
at org.hibernate.loader.Loader.list(Loader.java:2164)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1706)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
Wie kann ich den vorgegebenen Criteria
oder ProjectionList
in diesem Fall?
BEARBEITEN
@javax.persistence.Entity
@Table(name = "my_table")
public class My extends MyEntity<MyPK> {
@EmbeddedId
private MyPK id;
@Column(name = "text", nullable = false)
protected String text;
@ManyToOne
@JoinColumn(name = "property", nullable = false, insertable = false, updatable = false)
protected Option option;
@Override
public MyPK getId() {
return id;
}
@Override
public void setId(MyPK id) {
this.id = id;
}
//getters and setter
//equlas and hashCode
}
Sowie MyPK
Klasse:
@Embeddable
public class MyPK implements Serializable {
@Column(name = "qwerty")
protected String qwerty;
@Column(name = "property")
protected String property;
//constructors, getters and setters
}
- Könnten Sie uns zeigen, Ihre Einheit code?
- Ich habe bearbeitet Sie meine Frage und fügte hinzu, meine Einheit code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie setProjection() auf, Ihre Kriterien, dann die Liste () - Methode zurückgeben wird eine Art von
List<Object>
oderList<Object[]>
je nachdem, wie viele Eigenschaften, die Sie Hinzugefügt haben, um Ihr projektionsliste.Bedeutet dies, Sie haben Ihre eigene Schöpfung, Meine Instanzen.
Glaube ich, dass die classcastexception-Fehler Sie sehen, ist, weil die
list()
Methode zurückObject
Instanzen, sondern Sie haben ausdrücklich gefragt, fürMy
Instanzen, durch die Einstellung der ResultTransformerÄhnliche Frage hier beantwortet JBNizet