Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate with ProjectionList错误:无法转换为[Ljava.lang.Object;_Java_Hibernate_Criteria Api_Projection - Fatal编程技术网

Hibernate with ProjectionList错误:无法转换为[Ljava.lang.Object;

Hibernate with ProjectionList错误:无法转换为[Ljava.lang.Object;,java,hibernate,criteria-api,projection,Java,Hibernate,Criteria Api,Projection,我在返回我的对象列表时遇到问题。我正在使用具有@EmbeddedId的实体类,正如您在下面的代码中看到的,有两行具有类似文本:id. Criteria cr = createCriteria(true); cr.add(Restrictions.eq("id.qwerty", "QWERTY")); ProjectionList projectionList = Projections.projectionList(); projectionList.add(Projections.prope

我在返回我的对象列表时遇到问题。我正在使用具有
@EmbeddedId
的实体类,正如您在下面的代码中看到的,有两行具有类似文本:
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;
在这种情况下,如何定义
标准
投影列表

编辑

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

如果在条件上使用setProjection(),则list()方法将返回一种类型的
list
list
,具体取决于添加到投影列表中的属性数量

这意味着您必须自己创建My实例

    List<My> myList = new ArrayList<My>();
    for (Object[] row : cr.list()) {
         My m = new My();
         m.setQwerty((String) row[0]);
         // set the rest of the properties
         myList.add(m);
    }
List myList=new ArrayList();
对于(对象[]行:cr.list()){
我的m=新的我的();
m、 setQwerty((字符串)行[0]);
//设置其余的属性
添加(m);
}
我相信您看到的ClassCastException是因为
list()
方法返回
Object
实例,但您通过设置ResultTransformer显式请求了
My
实例


您能给我们看一下您的实体代码吗?@AleksandrM:我已经编辑了我的问题并添加了实体代码。
@Embeddable
public class MyPK implements Serializable {

   @Column(name = "qwerty")
   protected String qwerty;

   @Column(name = "property")
   protected String property;

   //constructors, getters and setters
}
    List<My> myList = new ArrayList<My>();
    for (Object[] row : cr.list()) {
         My m = new My();
         m.setQwerty((String) row[0]);
         // set the rest of the properties
         myList.add(m);
    }