【发布时间】:2018-11-02 05:58:36
【问题描述】:
NoticeGroupEntity:
@Id
@Column(name = "id")
private long id;
@Column(name = "name")
private String name;
@Column(name = "allowed_user_statuses")
@Convert(converter = StringSetConverter.class)
private Set<String> allowedUserStatuses;
这是StringSetConverter
public class StringSetConverter implements AttributeConverter<Set<String>, String> {
@Override
public String convertToDatabaseColumn(Set<String> list) {
return String.join(",", list);
}
@Override
public Set<String> convertToEntityAttribute(String joined) {
return new HashSet<>(Arrays.asList(joined.split(",")));
}
我尝试使用 JPA 选择 NoticeGroupEntity:
@Query("SELECT ng FROM #{#entityName} ng WHERE ?1 IN ng.allowedUserStatuses")
List<NoticeGroupEntity> findByAllowedUserStatus(String userStatus);
有什么办法选择吗?它不返回任何实体。 谢谢。
【问题讨论】:
-
这种方式不起作用。您的状态集仅在实体层可用,但您的查询将被转换为原生 sql 并在 db 层中运行。
-
实体名称不能使用 SpeL 表达式:spring.io/blog/2014/07/15/…
-
@SándorJuhos 也许你是对的。我会研究它。我已经用另一种方式解决了这个问题。
标签: java sql spring-data-jpa