我有以下模式
@Entity
Class Fruit {
String name;
}
@Entity
Class FruitAddition {
@ManyToOne
Basket basket;
@ManyToOne
Fruit fruit;
String additionType;
}
@Entity
Class Basket {
String owner;
@ManyToMany
List<Fruit> fruits;
@ManyToMany(mappedBy="basket")
List<FruitAddition> fruitAdditions;
}
所以Basket
是由Fruit
列表(一个水果可以同时在多个篮子里)和FruitAddition
列表组成的,这是几乎是Fruit
的列表,但是购物篮中的每个水果都有与之关联的其他数据additionType
。
这似乎有效。
现在我想查询一篮子中的所有水果,因此我尝试将两个别名组合成一个结果,如下所示:
SELECT fruitAlone, fruitAdded
FROM Basket bask
JOIN bask.fruits fruitAlone
JOIN bask.fruitAdditions addition
JOIN addition.fruit fruitAdded
WHERE bask.owner = 'JOE'
然后将结果解释为List<Fruit>
,因为fruitAlone
和fruitAdded
都属于Fruit
类型。
但我得到了java.lang.ClassCastException
。
这是如何正确完成的?
答案 0 :(得分:1)
您只需收到List<Object[]>
,其中第一个位置为fruitAlone
,第二个位置为fruitAdded
。像:
Query query = em.createQuery("SELECT fruitAlone, fruitAdded ...");
List<Object[]> results = query.getResultList();
for (Object[] obj : results) {
Fruit fruitAlone= obj[0];
Fruit fruitAdded = obj[1];
}