特定の学期のすべての投稿を取得するには、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以外の目的で使用する予定なので、追加したくありません。たぶん私は別のクラス(たとえばグループ)を持ち、そのクラスにもOneToMany of PostEntity(学期のクラスのような)があります
では、この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
するをPostEntity
越えてposts
関係。2つのエンティティを結合することにより、このクエリはPostEntity
関連するに関連付けられたすべてのインスタンスを返しますSemesterEntity
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加