Spring Data:枚举和存储库问题

时间:2014-08-06 13:05:42

标签: spring enums spring-data

我正在使用Spring Data和Repositories。我创建了一个带有枚举类型字段的实体,我声明了@Enumerated(EnumType.STRING),但我不得不创建一个方法getAuthority返回一个String。

@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 个答案:

答案 0 :(得分:18)

我想你必须重命名该字段,但你可以透明地进行:

@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); 
}