java - 当 oneToMany 关系包含使用 Hibernate 过滤器的值时如何获取实体

标签 java hibernate jpa filter

我有用户实体:

public class User implements IStandarizedEntity {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "web.user_role",
        joinColumns = {
            @JoinColumn(name = "user_id", referencedColumnName = "id")},
        inverseJoinColumns = {
            @JoinColumn(name = "role_id", referencedColumnName = "id")})
@Size(min = 1, max = 10)
private List<Role> roles = new ArrayList<>();

一个角色实体:

public class Role implements IStandarizedEntity {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;

@Column(name = "type")
@Enumerated(EnumType.STRING)
private ERole type;

我像使用 jpa 提供程序一样使用 hibernate。我只想获得具有特定角色的用户。我编写了命名查询来检索所有用户,现在我正在尝试使用 @Filter 来仅检索具有指定角色类型的用户。
我取得的成就是我可以检索所有用户,接下来在加载角色时我可以加载过滤后的角色列表,但这不是我想要做的。

最佳答案

查询时只过滤角色即可。 例如:

Select u from User u join fetch u.roles r where r.type = :roleType;

Join fetch 将返回角色与您的过滤器匹配的所有用户。

关于java - 当 oneToMany 关系包含使用 Hibernate 过滤器的值时如何获取实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38790972/

相关文章:

java - org.hibernate.HibernateException : The database returned no natively generated identity value

java - JOOQ with Gradle 和 Kotlin 不生成文件

java - 执行准备好的语句时出现 NullPointer 异常

java - Jedis 永远阻止与亚马逊的连接

java - JUnit 使用 Mockito 测试异步方法

java - JPA/Hibernate/Bean validator - 鉴别器上的@Pattern?

java - 是否有像 "Set"这样的对象,它只能包含唯一的字符串值,但也包含对字符串值出现次数的计数?

java - 如何在@Transactional注释方法中将状态提交到数据库?

java - Spring 数据 JPA。子实体的分页

java - 持久化时间戳类型只有日期没有时间