2013-04-09 29 views
0

我有两个玩JPA对象User.java & UserRole.JavaJPDA查询和播放 - 用户和角色(JOIN)

public User(String email, String password, String firstName, String lastName, Status status, List<UserRole> roles){ 
     this.email = email; 
     this.password = password; 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.status = status; 
     this.roles = roles; 
    } 

UserRole的

public UserRole(User user,RoleType roleType, Status status) { 
     this.user = user; 
     this.roleType = roleType; 
     this.status = status; 
    } 

是的UserRole通过

映射到用户
@OneToMany(mappedBy="user",fetch=FetchType.EAGER) 
public List<UserRole> roles; 

我希望写一个播放JPQL查询,将返回所有用户与指定的RO这是否可能,如果是这样,如何?

回答

0

因为你已经设计了你的模型,有两个表User.java & UserRole.java),实现你的目标并不复杂。

如果您User.java模型扩展play.db.jpa.Model类,解决方案可能是象下面这样:

// by using nested query to find all user that has admin role 
List<User> userList = User.find(
    "id IN (SELECT user FROM models.UserRole WHERE roleType = ?)", 
    RoleType.ADMIN 
).fetch(); 

上述表达式是相同的SQL查询:

SELECT * FROM "user" WHERE id IN (
    SELECT user_id FROM user_role WHERE role_type = 'ADMIN' 
);