问题描述
我有一个表格,里面有四列id,名称,颜色和形状。表中的
条目为:
您使用的HQL将返回 List< Object []> code>是位置0中 shape 的数组,而位置1中是 name 。
您可以使用:
List fruitList = s.createQuery(
select f.shape as shape,f.name (f.shape =:shape;)
.setParameter(shape,paramShape)
.setResultTransformer(Transformers.aliasToBean(FruitSearchTO.class))
.list ();
FruitSearchTOdto =(FruitSearchTO)fruitList .get(0);
或者,如果 FruitSearchTO 具有适当的构造函数:,你也可以通过选择新的FruitSearchTO(f.shape,f.name)来实现。
查看关于HQL的Hibernate Reference章节,特别是 15.6 选择子句一章。
I have a table fruit with four columns id, name, color, shape.
entries in the table would be:
1, apple, red, round 2, banana, yellow, long 3, tomato, red, round 4, orange, orange, roundNow I made an entity class Fruit mapped to above table.
@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 }In my DAO class, the code is:
String myQuery = "Select f.shape, f.name from Fruit f where f.shape = :shape"; Query query = this.em.createQuery(myQuery); query.setParameter("shape", "round");As obvious, running above query will return 3 rows.
I have a simple TO class FruitSearchTO
class FruitSearchTO { String shape; String name; //getters/setters here }This TO complies with the rows returned by my query.
But in my DAO running something like:
List<FruitSearchTO> fruitList = new ArrayList<FruitSearchTO>(); fruitList = query.getResultList();is throwing exception java.lang.ClassCastException: [Ljava.lang.Object; incompatible with FruitSearchTO]
Where am I going wrong and what is the solution to this ?
解决方案The HQL you're using will return a List<Object[]>, each element of the List being an array with shape in position 0 and name in position 1.
You can make the HQL return a List<FruitSearchTO> using an AliasToBeanResultTransformer:
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);Alternatively, if FruitSearchTO has an appropriate constructor:, you can also achieve this with select new FruitSearchTO(f.shape, f.name).
Take a look at the Hibernate Reference chapter on HQL, particularly 15.6 The select clause chapter.
这篇关于从JPA Query.getResultList()映射到自定义的TO的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!