Java 使用投影获取集合(hibernate)
Employee.javaJava 使用投影获取集合(hibernate),java,hibernate,Java,Hibernate,Employee.java public class Employee { String id; String name; List<String> designations; List<String> qualifications; } 我得到了以下异常堆栈跟踪 Caused by: java.lang.ArrayIndexOutOfBoundsException: 0 at org.hibernate.loader.criteria.CriteriaLoad
public class Employee
{
String id;
String name;
List<String> designations;
List<String> qualifications;
}
我得到了以下异常堆栈跟踪
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
at org.hibernate.loader.criteria.CriteriaLoader.getResultColumnOrRow(CriteriaLoader.java:148)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:639)
at org.hibernate.loader.Loader.doQuery(Loader.java:829)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2533)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
由于
名称
是一个列表,您应该加入它
try {
Criteria criteria = session.createCriteria(Employee.class);
criteria.setFetchMode("designations", FetchMode.JOIN);
List list = criteria.list();
} catch (Exception e) {
//print e
}
无法获取具有条件的元素集合(已读取)。您必须使用本机SQL在ProjectionList中我应该传递什么?您可能会误解投影和联接之间的关系。投影是针对单个列的,因为您的指定是一个集合,您需要为此编写一个子标准,然后添加投影/限制。除了子标准外,可以。你能解释一下如何在这个例子中继续吗?它是类对象。这里Classjava.lang.ArrayIndexOutOfBoundsException似乎是“不可能”的一个非常奇怪的拼写。
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
at org.hibernate.loader.criteria.CriteriaLoader.getResultColumnOrRow(CriteriaLoader.java:148)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:639)
at org.hibernate.loader.Loader.doQuery(Loader.java:829)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2533)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
try {
Criteria criteria = session.createCriteria(Employee.class);
criteria.setFetchMode("designations", FetchMode.JOIN);
List list = criteria.list();
} catch (Exception e) {
//print e
}