java - JPA Criteria API 获取具有特定父属性值的实体

标签 java hibernate jpa

我有一个 UserUserRole 模型,如下所示:

User.java

public class User {

    @Id
    private Long id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "ROLE_ID")
    private UserRole role;

    //All other properties...

}

UserRole.java

public class UserRole {

    @Id
    private Long id;

    private String name;

    //All other properties...

}

我需要能够获取具有role = 1L的所有用户。

我可以使用 JPQL 执行此操作,如下所示:

TypedQuery<SystemUser> query = entityManager.createQuery("Select u from User u left join u.role r where r.id=?1", User.class);
query.setParameter(1, roleId);
return query.getResultList();

但是,出于某种原因,我想知道是否可以通过简单地使用 JPA Criteria API 来不使用 JPQL 实现完全相同的效果。

谁能帮帮我吗?

谢谢, 斯里拉姆·斯里达兰

最佳答案

尝试下面的代码,

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<User> criteriaQuery = builder.createQuery(User.class);
Root<User> root = criteriaQuery.from(User.class);
criteriaQuery.where(builder.equal(root.get("role").get("id"), roleId));
return entityManager.createQuery(criteriaQuery)..getResultList();

关于java - JPA Criteria API 获取具有特定父属性值的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59542575/

相关文章:

java - 在 JPA 中, native 查询是否发生回滚?

java - 开泰结构 : pass some field to achieve fault tolerance

java - 我无法将对象从服务器发送到客户端

java - Hibernate UserType 将@Formula 结果映射到非实体自定义对象

java - Spring Data 中的查询创建 - 动态 where 子句

list - JPA OneToMany - 添加/删除对象后列表不会更新,但会保留在数据库中

java - 使用 Java 将 XML 转换为 CSV

java - 如何在 MapBox Android SDK 上使用 FitBounds?

java - 从 oracle 数据库进行 hibernate 保存后,实体的 ID 与序列自动生成 id 不同

java - 用于在 glassfish 中部署的 ejb 的 persistence.xml