联接表中的 JPQL 查询
Posted
技术标签:
【中文标题】联接表中的 JPQL 查询【英文标题】:JPQL query in joined tables 【发布时间】:2018-09-04 23:31:57 【问题描述】:我的问题很简单,虽然我找到了多种解决方案,但我没有成功正确实施它们,所以我请求你的帮助。
在一个名为 Prof
的实体类中,我有这个:
@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
列表
【问题讨论】:
【参考方案1】:你可以使用这个JPQL,
SELECT p.exams FROM Prof p WHERE p.idUser = :id
调用会是这样的:
List<Exam> exams = em.createQuery("...JPQL...")
.setParameter("id", idUser)
.getSingleResult();
使用此 JPQL 只会获取 exams
的列表,而不是 Prof
类中的所有对象。
更好的是,您可以将 JPQL 与 NamedQuery 一起使用,但这样您可以快速进行测试。 :)
【讨论】:
非常感谢,我还有一个问题,如果我想更新 List您也可以像这样使用 em.find() :
EntityManager em;
List<Exam> exams= new ArrayList<>( em.find( Prof.class, givenID ).getExams() );
【讨论】:
是的,这是事实,但是find()
方法会进行多个查询,它会填充一个对象Prof
,然后执行相关查询以获得exams
信息以上是关于联接表中的 JPQL 查询的主要内容,如果未能解决你的问题,请参考以下文章