JPQL: прямой запрос списка объектов

У нас есть Вселенная и Funkopop. Мы сделали связь @OneToMany.

@Entity
public class Universe implements HasId{

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    Integer id;

    String name;

    @OneToMany
    List<FunkoPop> funkoPops = new ArrayList<>(); 

}



@Entity
public class FunkoPop implements HasId {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id = null;
    private String name;
    private boolean waterproof = false;
}

Мы хотим перечислить все фанкопопы во вселенной.

var pops = em.createQuery("SELECT u.funkoPops FROM Universe u WHERE u.name = :universeName", 
                 FunkoPop.class)
                .setParameter("universeName", "Kung-Fury")
                .getResultList();

К сожалению, у нас есть:

Exception in thread "main" java.lang.IllegalArgumentException: 
Type specified for TypedQuery [io.robusta.funko.entities.FunkoPop] is incompatible with 
query return type [interface java.util.Collection]

Вы можете просто использовать getSingleResult () вместо getResultList ().

hakamairi 02.07.2018 14:09

Это не то, что он / она ищет: u.funkoPops в запросе относится к набору элементов типа FunkoPop.

MWiesner 02.07.2018 14:13

Вы не можете выбрать МНОГОЗНАЧНОЕ поле в JPQL. Любые документы JPA / JPQL скажут вам, что

user3973283 02.07.2018 15:59

Это HQL? Измените em.createQuery(..., FunkoPop.class) на em.createQuery(..., Collection.class) и посмотрите, что вы получите в результате

crizzis 05.07.2018 16:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
68
0

Другие вопросы по теме