连接表中的 JPQL 查询

JPQL query in joined tables

我的问题很简单,虽然我找到了多种解决方案,但我没有成功地正确实施它们,所以我请求你的帮助。

在一个名为 Prof 的实体 Class 中,我有这个:

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer idUser;
    @OneToMany (cascade = PERSIST)
    @JoinTable(name="jnt_Prof_Exam",
                joinColumns = @JoinColumn(name="idUser"), 
                inverseJoinColumns = @JoinColumn(name="idExam"))
        private List<Exam> exams;

现在我想知道如何为给定的 idUser

获取 Exam 的列表

你可以使用这个 JPQL,

SELECT p.exams FROM Prof p WHERE p.idUser = :id

电话会是这样的:

List<Exam> exams = em.createQuery("...JPQL...")
     .setParameter("id", idUser)
     .getSingleResult();

使用此 JPQL 只会获取 exams 的列表,而不是 class Prof.

中的所有对象

更好的是,您可以将 JPQL 与 NamedQuery 一起使用,但这样您可以快速测试。 :)

您也可以像这样使用 em.find() :

EntityManager em;
List<Exam> exams= new ArrayList<>( em.find( Prof.class, givenID ).getExams() );