【问题标题】:Spring Data: Enumeration and Repository issueSpring Data:枚举和存储库问题
【发布时间】:2014-08-06 21:52:44
【问题描述】:

我正在使用 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,但我不喜欢这样。

我做错了吗?如何删除警告?

【问题讨论】:

    标签: spring enums spring-data


    【解决方案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); 
    }
    

    【讨论】:

    • 我认为将字段保留为枚举并更改列名会更容易。枚举将更容易在代码中使用。
    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2018-08-06
    • 2016-12-26
    • 2019-07-30
    • 1970-01-01
    • 2019-10-02
    • 2016-01-19
    相关资源
    最近更新 更多