2017-06-21 51 views
1

我無法找到一些具體的文檔(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation) 並沒有令人滿意的答覆在幾個博客。 所以在這裏我的問題。春季啓動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註釋?或/和它應該是什麼樣子?

回答

0

試試這個

List<Workstation> findByUserAgeLessThan(int maxAge); 

或者你也可以寫你的查詢

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

好吧,第一個選項沒有工作這麼好。它使問題更復雜的名稱。例如如果我們使用「AllUsers」和「TrueAge」,Spring不能查找它。 –

+1

第一個選項有什麼問題?我在本地測試它,它工作得很體面。 –

+0

是的,當涉及一些複雜的查詢時,查詢方法名稱變得非常複雜和冗長。你現在最好的選擇是使用'@Query()' –

0

你應該有這樣的事情:

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

基本上,你需要使用到JOINJPQL

+0

謝謝!所以使用查詢手工似乎是最明顯的,現在:) –

+0

但** @參數**似乎不推薦....因此在第一個變量的查詢「?1」使用幫助。 –

0

這工作:

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