我有两个实体 User
以及 Role
. 每个用户可以有多个角色。
用户类
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(
name = "user_role",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id")
)
private Set<Role> roles = new HashSet<>();
}
角色类:
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
private String name;
}
因此将创建一个新的联接表,名为:user\u role
我想创建一个查询,用于返回具有 role_id
例如,4。我已尝试的查询:
@Override
public List<User> getArtists() {
return em.createQuery(
"from User u, Role r where u.roles='4'",
User.class
).getResultList();
}
如何修复此查询以检索具有 role_id
四分之一?
3条答案
按热度按时间scyqe7ek1#
你可以这样做:
这个
QueryHints.HINT_PASS_DISTINCT_THROUGH
作为额外的性能优化添加。但是请注意,这个优化只适用于Hibernate5.2.2.final。。。5.2.11.最终。它在5.2.12决赛中被打破了。sg24os4d2#
也许你可以看看下面的主题,里面给出的答案和你的问题指向的方向是一样的:连接表上的jpa查询
f3temu5u3#
如果我是你的话,我将获得在hibernate中使用springdatajpa的好处,只需使用以下语句:如果你不想使用查询:
在用户存储库中: