java 当存在重复值时,如何从map(key,value)编写spring JPA Query

wribegjk  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(116)

我想获取事件ID的属性messageUUID等于从函数传递的值的事件。metaProperties是一个带有键的散列表:

"messageId"
"messageType"
"messageUUID"

许多事件将具有相同的messageIdmessageUUID值,当我尝试查询事件的关键字是messageUUID,它的值等于我正在搜索的事件时-它给出错误

@Query("select event.id from EventLogDb event where (key(event.metaProperties) = 'messageUUID' and :message in VALUE(event.metaProperties))")
  Slice<EventLogDb> findAllByMessage(
          String message, Pageable pageable);

ERROR: more than one row returned by a subquery used as an expression

所以据我所知-这是因为:message in VALUE(event.metaProperties)给出了两个结果-对于名为messageIdmessageUUID的键,因为它们具有相同的值。
我应该如何更正此查询以使其正常工作?

xdyibdwo

xdyibdwo1#

你得到错误:作为表达式使用的子查询返回多行,因为正如您所说,有许多行具有相同的messageUUID,因此当您使用“=”符号时,查询期望返回1个值,而在您的情况下有2,3,... values for one entity -〉more than row returned(针对给定的元属性,您真正想要哪个messageUUID?)
试试这样的方法:

@Query("select event.id from EventLogDb event where event.metaProperties IN :messageUUID and event.metaProperties in :message")

注意-如果有NULL值,则不应使用IN运算符

或检查(重构)数据库模型
也许这可以帮助:Solution to "subquery returns more than 1 row" error

相关问题