JPDA查询和播放 - 用户和角色(JOIN)

时间:2013-04-09 18:14:08

标签: java jpa playframework jpql

我有两个玩JPA Objects User.java& UserRole.Java

 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;
     }

UserRoles通过

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

我希望编写一个播放JPQL查询,它将返回具有指定角色的所有用户 - 这是否可能,如果可以,如何?

1 个答案:

答案 0 :(得分:0)

因为你设计了这样的模型,有两个表User.java&amp; 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'
);