2014-10-08 100 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和连接的工作原理。

相关问题