连接表中的 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() );
我的问题很简单,虽然我找到了多种解决方案,但我没有成功地正确实施它们,所以我请求你的帮助。
在一个名为 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() );