Hibernate 将列表从JPA Query.getResultList()映射到自定义的
我有一个有四列的水果,id,名称,颜色,形状 表中的条目为:Hibernate 将列表从JPA Query.getResultList()映射到自定义的,hibernate,jpa,Hibernate,Jpa,我有一个有四列的水果,id,名称,颜色,形状 表中的条目为: 1, apple, red, round 2, banana, yellow, long 3, tomato, red, round 4, orange, orange, round 现在我制作了一个映射到上表的实体类Fruit @Entity @Table(name="fruit") public class Fruit implements Serializable { @Id @Column(name="ID") Strin
1, apple, red, round
2, banana, yellow, long
3, tomato, red, round
4, orange, orange, round
现在我制作了一个映射到上表的实体类Fruit
@Entity
@Table(name="fruit")
public class Fruit implements Serializable {
@Id
@Column(name="ID")
String id;
@Column(name="NAME")
String name;
@Column(name="COLOR")
String color;
@Column(name="SHAPE")
String shape;
//getters/setters goes here
}
在我的DAO类中,代码是:
String myQuery = "Select f.shape, f.name from Fruit f where f.shape = :shape";
Query query = this.em.createQuery(myQuery);
query.setParameter("shape", "round");
很明显,运行上述查询将返回3行
我有一个简单的课程
class FruitSearchTO
{
String shape;
String name;
//getters/setters here
}
这符合我的查询返回的行
但在我的DAO中,运行类似于:
List<FruitSearchTO> fruitList = new ArrayList<FruitSearchTO>();
fruitList = query.getResultList();
List foultlist=new ArrayList();
结果列表=query.getResultList();
正在引发异常java.lang.ClassCastException:[Ljava.lang.Object;与FruitSearchTO不兼容]
我哪里出错了?解决方法是什么?您使用的HQL将返回一个
列表
,列表的每个元素都是一个数组,其中形状
位于位置0,而名称
位于位置1
您可以使用以下命令使HQL返回一个列表
:
或者,如果groutsearchto
有一个合适的构造函数:,您也可以通过选择新的groutsearchto(f.shape,f.name)
来实现这一点
请看HQL的Hibernate参考章节,特别是章节。在JPQL中,您有一个
新的
操作符,它允许您动态创建对象的实例,而不必是实体本身(就像您的情况一样,DTO不是实体)
如果您不想使用特定于供应商的解决方案,您可以使用NEW
操作符,或者只需迭代生成的对象[],然后自己创建DTO
这些可能是您感兴趣的材料:,和。谢谢哈维。。让我试试这个,然后再给你回复!!你能粘贴你先前的答案吗。我使用的是旧版本的Hibernate,它没有ResultTransformer方法。明白了!!谢谢由于版本问题,我无法验证上述答案。但是,迭代器版本确实有效@JamesDW感谢您的编辑,实际上似乎DTO不需要包含在映射中。
List fruitList = s.createQuery(
"select f.shape as shape, f.name as name from Fruit f where f.shape = :shape;")
.setParameter("shape", paramShape)
.setResultTransformer( Transformers.aliasToBean(FruitSearchTO.class))
.list();
FruitSearchTOdto = (FruitSearchTO) fruitList .get(0);