【发布时间】:2020-10-10 18:20:49
【问题描述】:
我有这样的实体:
@Getter
@Setter
@Entity
public class Conversation extends AbstractEntity{
@ElementCollection
@Column(name = "user_id", nullable = false)
@CollectionTable(name = "conversation_user", joinColumns = @JoinColumn(name = "conversation_id", nullable = false))
private List<String> usersIds;
}
是否可以通过精确匹配用户 id 通过 spring 的存储库找到对话实体?例如我有这些实体:
id | user_ids
------------------------------------------
1 | user-a, user-b, user-c
2 | user-a, user-b
3 | user-a, user-c
因此,当我希望通过用户 ID user-a 和 user-c 像这样的常规 IN 子句找到对话时:
SELECT c FROM Conversation c WHERE c.userIds IN :userIds
会找到 id 1 和 3 的对话,但我想找到完全匹配的,所以我的预期结果只有对话 3。
可能的解决方案是在存储库中使用常规 IN 子句,并在服务层中使用下一个过滤器集合,但我更喜欢直接从数据库返回所需实体的解决方案。至少在 JPQL 或本机 sql 中是否有可能?谢谢。
【问题讨论】:
-
好吧,您使用的是“IN”,它基本上是一个“子集”运算符。等于(“=”)有效吗?我现在无法测试这个
-
@BenjaminMaurer 我今天试过了,它在应用程序启动时出现错误“用户 ID 上的运算符包含需要一个标量参数”
标签: spring-data-jpa hql jpql spring-repositories