java-JPA“包含以下内容之一”

我正在编写一个Dao以获取与某个人相关的所有消息.但是我找不到正确的JPQL语法.

在我的模型中:

>一个人有多个角色(我将这些角色作为参数传递给查询:一组枚举值).
>一条消息与多个角色有关.

因此,我想查找与某人相关的所有消息:

SELECT m FROM Message m
WHERE m.roles [contains one of] :userRoles

给予:userRoles作为Set< Role>参数.

该缺失的[包含]部分之一的正确语法是什么?

我看过IN和MEMBER OF
例如

SELECT m FROM MESSAGE m
WHERE m.roles IN :userRoles

但是这两个关键字在一侧都需要一个项目.双方都有多个物品.

更多详情:

@Entity
@Table(name = "message")
public class Message {
    @Id
    private Long id;

    @ElementCollection
    @Enumerated(javax.persistence.EnumType.STRING)
    @JoinTable(name="message_roles",
        joinColumns={@javax.persistence.JoinColumn(name="message_id")})
    @Column(name="role_code")
    private Set<Role> roles;

    ...
}

public enum Role {
    DEVELOPER, ADMIN, TESTER, MANAGER
}

这将产生一个看起来正确的表结构:

message
    message_id

message_roles
    message_id
    role_code

但是我不知道如何查询它是否包含给定角色的特定列表之一.

我是否必须重写它以单独传递每个用户角色?

出于特定于应用程序的原因,我无法随处加入以获取其角色:角色必须是查询的参数.

解决方法:

试试这个:

SELECT DISTINCT m FROM MESSAGE m JOIN m.roles r WHERE r IN :userRoles
上一篇:java-与JPQL不相关的两个表中的左联接


下一篇:19 JPQL