Java JPA-选择当参数是属性的成员时,属性是一组字符串

Java JPA-选择当参数是属性的成员时,属性是一组字符串,java,sql,spring-data-jpa,Java,Sql,Spring Data Jpa,通知组实体: 我尝试使用JPA选择NoticeGroupEntity: @Query("SELECT ng FROM #{#entityName} ng WHERE ?1 IN ng.allowedUserStatuses") List<NoticeGroupEntity> findByAllowedUserStatus(String userStatus); 有什么选择吗?它不返回任何实体。 谢谢。你的@查询太奇怪了 试试这个: @Query("SELECT ng FROM No

通知组实体:

我尝试使用JPA选择NoticeGroupEntity:

@Query("SELECT ng FROM #{#entityName} ng WHERE ?1 IN ng.allowedUserStatuses")
List<NoticeGroupEntity> findByAllowedUserStatus(String userStatus);
有什么选择吗?它不返回任何实体。 谢谢。

你的@查询太奇怪了

试试这个:

@Query("SELECT ng FROM NoticeGroupEntity ng WHERE ?1 member ng.allowedUserStatuses")
以上为实体工作。我还没有尝试使用基本类型

如果不起作用,本机查询将起到拯救作用:

@Query(value = "SELECT ng FROM NoticeGroupEntity ng WHERE ng.allowed_user_statuses LIKE ?1", native = true)

并将您的参数作为%+status+%

我尝试您的答案,但也不起作用,谢谢,请注意,ng.AllowedUserStatus是一组字符串,userStatus只是一个字符串,可能是ng.AllowedUserStatus.member of的成员,而不是member。它抛出java.lang.IllegalArgumentException:queryIt的验证失败它不适用于原语?您可以尝试本机查询。修改您的查询以匹配普通SQL,它始终有效是的,类似%status%的SQL是新想法,但如果ng.allowed\u user\u状态包含:ACTIVE,非活动的应该是“全部获取”。您有两个选项:规范化数据库以拆分状态,而不是作为列加入,或者创建接受特殊值的自定义查询。此选项不起作用。您的状态集仅在实体层中可用,但您的查询将被转换为本机sql并在db层中运行。您不能对实体名称使用SpeL表达式:@SándorJuhos也许您是对的。我会研究的。我用另一种方法解决了这个问题。
@Query("SELECT ng FROM NoticeGroupEntity ng WHERE ?1 member ng.allowedUserStatuses")
@Query(value = "SELECT ng FROM NoticeGroupEntity ng WHERE ng.allowed_user_statuses LIKE ?1", native = true)