Java 使用投影获取集合(hibernate)

Java 使用投影获取集合(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

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.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 
        }