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

@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以外的其他用途。也许我要再开设一个类(class)(例如Group),该类(class)也要有一个PostTo的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);

最佳答案

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

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

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

10-06 13:37