Spring Data: перечисление и проблема с репозиторием

Я использую данные Spring и репозитории. Я создал сущность с полем типа перечисления, которое я объявил @Enumerated (EnumType.STRING), но я вынужден создать метод getAuthority, возвращающий строку.

@Entity
@Configurable
public class BaseAuthority implements GrantedAuthority {

    @Enumerated(EnumType.STRING)
    @Column(unique = true)
    private AuthorityType authority;

    @Override
    public String getAuthority() {
        return authority.toString();
    }

}

перечисление выглядит следующим образом:

public enum AuthorityType {
REGISTEREDUSER, ADMINISTRATOR;
}

в репозитории для сущности я создал операцию для поиска по типу полномочий:

@Repository
public interface BaseAuthorityRepository extends JpaRepository<BaseAuthority, Long> {

    BaseAuthority findByAuthority(AuthorityType authority);

}

тем не менее, я получаю предупреждение:

Parameter type (AuthorityType) does not match domain class 
property definition (String). BaseAuthorityRepository.java

раньше у меня была операция получения String, а не AuthorityType, но это создает исключение среды выполнения. Я мог бы изменить имя полевого органа на authorityType, но мне это не нравится.

Я делаю что-то неправильно? Как удалить предупреждение?

1 ответов


Я думаю, вам нужно переименовать поле, но вы можете сделать это прозрачным способом:

@Entity
public class BaseAuthority implements GrantedAuthority {
    private static final long serialVersionUID = 1L;

    @Enumerated(EnumType.STRING)
    @Column(unique = true, name = "authority")
    private AuthorityType authorityType;

    AuthorityType getAuthorityType() {
        return authorityType;
    }

    @Override
    public String getAuthority() {
        return authorityType.toString();
    }
}

и измените свой репозиторий на

@Repository
public interface BaseAuthorityRepository extends JpaRepository<BaseAuthority, Long> {

    BaseAuthority findByAuthorityType(AuthorityType authority); 
}