繁体   English   中英

Hibernate JPA条件查询

[英]Hibernate JPA Criteria Query

我需要查询包含列表的对象。

@Entity
@Table(name = "userAccount")
public class UserAccounts implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@Column(name = "email", nullable = false, unique = true)
private String username;

@Column(name = "hash", nullable = false, length = 60)
private String hash;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "userID"), inverseJoinColumns = @JoinColumn(name = "roleID"))
private List<Role> roles;

@Enumerated(EnumType.ORDINAL)
private Status status;

//getters and setters
}

我需要获取包含角色“ ROLE_USER”的对象。 如何使用CriteriaBuilder实现这一目标?

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<UserAccounts> cq = cb.createQuery(UserAccounts.class);
    Root<UserAccounts> ua = cq.from(UserAccounts.class);

我应该在这里放什么?

//      cq.where(cb.and(cq.equals(ua.get("roles")),
//      cq.equals(ua.get("status"), Status.ACTIVE)));

TIA。

等效的JPQL可能像这样

SELECT ua FROM UserAccount ua JOIN ua.roles r WHERE r.name = :roleName

因此标准将是

Join<UserAccounts, Role> roleRoot = ua.join(UserAccounts_.roles);
roleRoot.alias("r");
ParameterExpression<String> param = qb.parameter(String.class);
cq.where(roleRoot.get(Role_.name).equals(param));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM