У нас есть Вселенная и 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]
Это не то, что он / она ищет: u.funkoPops в запросе относится к набору элементов типа FunkoPop.
Вы не можете выбрать МНОГОЗНАЧНОЕ поле в JPQL. Любые документы JPA / JPQL скажут вам, что
Это HQL? Измените em.createQuery(..., FunkoPop.class) на em.createQuery(..., Collection.class) и посмотрите, что вы получите в результате




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