2014-10-08 103 views
3

我想通過註釋@Query進行Jpa存儲庫的加入查詢我有三個表。如何使用加入來定義JPA存儲庫查詢

本機查詢:

select application.APP_ID 
from user, customer, application 
where user.USE_CUSTOMER_ID = customer.CUS_ID 
and application.APP_CUSTOMER_ID = customer.CUS_ID 
and user.USE_ID=1; 

刈我有表的Hibernate實體

所以我在ApplicationRespository試圖

@Query(SELECT application FROM Application a 
    INNER JOIN customer c ON c.customer.id = a.customer.id 
    INNER JOIN user u ON u.customer.id = c.customer.id 
    INNER JOIN application a ON a.user.id = u.id 
    WHERE 
    u.id = :user.id) 
List<Application> findApplicationsByUser(@Param("User") User user); 

日誌說

意外的標記

什麼想法,請?

我的表實體

Application.java:

@Entity 
@Table 
public class Application extends BaseSimpleEntity { 
... 
    @ManyToOne(optional = false) 
    private Customer customer; 
... 
} 

Customer.java:

@Entity 
@Table 
public class Customer extends BaseSimpleEntity { 
... 
    @OneToMany(mappedBy = "customer") 
    private List<User> users; 
    @OneToMany(mappedBy = "customer") 
    private List<Application> applications; 
... 
} 

User.java:

@Entity 
@Table 
public class User extends BaseSimpleEntity { 
... 
    @ManyToOne(optional = false) 
    private Customer customer; 
... 
} 

THX

回答

8

你並不需要在JPA條款,因爲JPA已經知道如何實體相關的感謝映射的註釋。

此外,您選擇application,這不是在您的查詢中定義的別名。

而你的加入沒有任何意義。

查詢應僅僅是

select application FROM Application a 
join a.customer c 
join c.users u 
where u.id = :userId 

閱讀Hibernate文檔,瞭解HQL和連接的工作原理。

相關問題