gpt4 book ai didi

java - JPA "contains one of"

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:10 25 4
gpt4 key购买 nike

我正在写一个 Dao 来获取所有 MessagesPerson 有关.但是我找不到正确的 JPQL 语法。

在我的模型中:

  • 一个Person有多个Roles (我将这些作为参数传递到查询中:枚举值集)。
  • 一个Message与多个 Roles 有关.

所以我想找到与某个人相关的所有消息:

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

给它:userRoles作为 Set<Role>参数。

缺少的 [contain one of] 部分的正确语法是什么?

我看过 INMEMBER 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 - JPA "contains one of",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42072771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com