JPA - выберите, когда параметр является членом атрибута, атрибут является набором строк - PullRequest
0 голосов
/ 23 мая 2018

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(",")));
}

Я пытаюсь выбрать NoticeGroupEntity с помощью JPA:

@Query("SELECT ng FROM #{#entityName} ng WHERE ?1 IN ng.allowedUserStatuses")
List<NoticeGroupEntity> findByAllowedUserStatus(String userStatus);

Любой способ выбрать?Это не возвращает никакой сущности.Спасибо.

1 Ответ

0 голосов
/ 23 мая 2018

Ваш @Query такой странный.

Попробуйте:

@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 + "%"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...