【问题标题】:JPQL for a Unidirectional OneToManyJPQL 用于单向 OneToMany
【发布时间】:2015-07-09 08:16:53
【问题描述】:

我的 Spring 存储库接口方法需要 jpql 查询,以检索给定学期的所有帖子。

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = CascadeType.MERGE)
@JoinTable
(
 name = "semester_post",
 joinColumns = {@JoinColumn(name = "semester_id", referencedColumnName = "id")},
 inverseJoinColumns = {@JoinColumn(name = "post_id", referencedColumnName = "id", unique = true)}
)
private List<PostEntity<?>> posts = new ArrayList<>();

PostEntity 没有对 Semester 的引用,我也不想添加,因为我计划将此 PostEntity 用于 Semester 以外的其他事情。也许我会有另一个类(比如说 Group),它也会有一个 PostEntity 的 OneToMany(就像学期中的那个)

那么,我该如何将这个 SQL 查询写成 JPQL 查询呢?

select * from posts join semester_post on semester_post.post_id = posts.id where semester_post.semester_id = 1;

我的仓库

public interface PostRepository extends JpaRepository<PostEntity, Long> {

String QUERY = "SELECT p FROM PostEntity p ... where semester = :semesterId";

@Query(MY_QUERY)
public List<PostEntity> findBySemesterOrderByModifiedDateDesc(@Param("semesterId") Long semesterId);

【问题讨论】:

    标签: java hibernate jpa spring-data jpql


    【解决方案1】:

    将为您提供所需结果的查询是:

    SELECT p FROM SemesterEntity s JOIN s.posts p WHERE s.id = :semesterId
    

    此查询使用 JOIN 运算符跨 posts 关系将 SemesterEntity 连接到 PostEntity。通过将两个实体连接在一起,此查询返回与相关 SemesterEntity 关联的所有 PostEntity 实例。

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
    • @sina72,当然它回答了这个问题。 OP 询问该 SQL 的 JPQL 是什么,而这正是应该使用的。
    • 单独发布代码不是很有帮助。我缺少解释是否以及为什么这有帮助。无论如何,请原谅我的自动文本评论,它也缺少指导。
    • 我可能应得的......虽然“SELECT p FROM SemesterEntity”当时对我来说根本没有意义。我希望它返回学期而不是帖子。我会尝试记录更多。只有在我浪费了几天时间在我知道可能有一个简单解决方案的事情上之后,我才真正在 SO 上发帖。谢谢。
    • 这样,更好吗? :-)
    猜你喜欢
    • 2011-08-06
    • 2017-08-14
    • 2011-06-25
    • 2014-07-30
    • 1970-01-01
    • 2017-08-21
    • 2015-09-11
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多