有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有多对多关系的java条件查询

我有两个实体:具有多对多关系的项目和角色。我正试图用CriteriaAPI选择包含特定角色的项目,但我的代码不起作用。我使用Hibernate和Spring boot。我不使用元模型

以下是我的实体: 项目:

@Entity
public class Project
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank
    @Column
    private String name;

    @ManyToMany
    @JoinTable(joinColumns = @JoinColumn(name = "project_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private List<Role> roles;

    //Constructors getters and setters omitted
}

角色:

@Entity
public class Role
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank
    @Column
    private String name;

    //constructors getters and setters omitted
}

这里是查询:

public List<Project> findByRole(Role role)
{
    Session session = sessionFactory.openSession();
    CriteriaBuilder builder = session.getCriteriaBuilder();

    CriteriaQuery<Project> criteria = builder.createQuery(Project.class);
    Root<Project> root = criteria.from(Project.class);

    Path<List<Role>> roles = root.get("roles");
    Expression<Role> roleParameter = builder.parameter(Role.class, "role");

    criteria.select(root).where(roleParameter.in(roles));

    TypedQuery<Project> query = session.createQuery(criteria)
                                        .setParameter("role", role);
    List<Project> projects = query.getResultList();

    return projects;
}

无论数据库中有什么类型的数据,此查询都返回null。我显然做错了什么,但我对CriteriaAPI非常陌生,我无法理解它。我很感激你的帮助


共 (0) 个答案