Spring引用JPA过滤器通过连接表

时间:2017-06-21 15:44:49

标签: spring hibernate spring-data-jpa jpql

我无法在文档中找到具体的内容(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation) 在几个博客中并没有令人满意的答案。 所以这是我的问题。

我有表实体,如:

@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注释是否可能?或者/它应该是什么样的?

3 个答案:

答案 0 :(得分:2)

试试这个

List<Workstation> findByUserAgeLessThan(int maxAge);

或者您也可以编写查询

@Query("Select w from Workstation w where w.user.age < :maxAge")
List<Workstation> findByUserAgeLesserThan(@Param("maxAge") int maxAge);

答案 1 :(得分:1)

你应该有这样的东西:

@Query("SELECT w from Workstation w INNER JOIN w.user u where u.age < :age")
List<Workstation> findByUserAgeLessThan(@Param("age") int age);

基本上,您需要JOIN使用JPQL。{/ p>

答案 2 :(得分:1)

这有效:

@Query("SELECT w from Workstation w INNER JOIN w.user u where u.age < ?1")
List<Workstation> findByUserAgeLessThan(int age);