ドキュメント(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation) で何か具体的なものを見つけられず、いくつかのブログで満足のいく回答はありません。 ここに私の質問です。SpringブートJPAフィルタ(ジョインテーブル別)
私は次のようにテーブルのエンティティを持っている:
@Entity
@Table(name = "workstation")
public class Workstation
{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userid", nullable = false)
public User user;
}
とユーザーテーブルエンティティ:
public class user
{
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
public Integer id;
@Column(name = "age", nullable = false)
public int age
}
今、私はこのような私のリポジトリでクエリを持っているしたいと思います:
public interface WorkstationRepo extends CrudRepository<Workstation, Long> {
findByUserAgeLesserThan(int maxAge);
}
私は、ワークステーションエンティティを通じて特定の年齢以下のすべてのユーザーを検索したいと考えています。
@Queryアノテーションなしでも可能ですか?または/そしてどのように見えるのでしょうか?
@Query("SELECT w from Workstation w INNER JOIN w.user u where u.age < :age")
List<Workstation> findByUserAgeLessThan(@Param("age") int age);
は基本的に、あなたが使用してテーブルをJOIN
する必要があります。
まあ、とても良い最初のオプションのdidntの仕事を。問題はより複雑な名前になります。例えば私たちが "AllUsers"と "TrueAge"を使用すると、Spring cantはそれを調べます。 –
最初のオプションの問題は何ですか?私はそれをローカルでテストしました。 –
はい少し複雑なクエリが含まれている場合、クエリメソッド名は本当に複雑で長くなります。今のところ最良のオプションは '@Query()'を使うことです。 –