Объедините несколько псевдонимов одного и того же @Entity в одном результате с HQL - PullRequest
0 голосов
/ 18 мая 2018

У меня есть следующий шаблон

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

Как это правильно сделать?

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете просто получить 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...