Java 使用枚举的优点

Java 使用枚举的优点,java,spring,spring-mvc,enums,Java,Spring,Spring Mvc,Enums,我正在经历一个春季冬眠的例子 您好,这里作者使用enum进行默认初始化(感谢JB Nizet理解这一点)。但是如果没有这个初始化,它可以正常工作。那么使用这个枚举还有其他好处吗 使用枚举的代码 @Entity @Table(name="USER_PROFILE") public class UserProfile { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; @Col

我正在经历一个春季冬眠的例子

您好,这里作者使用enum进行默认初始化(感谢JB Nizet理解这一点)。但是如果没有这个初始化,它可以正常工作。那么使用这个枚举还有其他好处吗

使用枚举的代码

@Entity
@Table(name="USER_PROFILE")
public class UserProfile {

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id; 

    @Column(name="TYPE", length=15, unique=true, nullable=false)
    private String type = UserProfileType.USER.getUserProfileType();

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }


    @Override
    public int hashCode() {
    //hash code implementaion
    }

    @Override
    public boolean equals(Object obj) {
        //equals implementation
    }

    @Override
    public String toString() {
        return "UserProfile [id=" + id + ",  type=" + type  + "]";
    }


}
枚举实现

public enum UserProfileType {
    USER("USER"),
    DBA("DBA"),
    ADMIN("ADMIN");

    String userProfileType;

    private UserProfileType(String userProfileType){
        this.userProfileType = userProfileType;
    }

    public String getUserProfileType(){
        return userProfileType;
    }

}

(我最初的问题是如何调用getUserProfileType函数以及如何初始化枚举。感谢JB Nizet提供您以前的评论。)

填充数据库的数据库脚本包含

INSERT INTO APP_USER_USER_PROFILE (user_id, user_profile_id)
SELECT user.id, profile.id FROM app_user user, user_profile profile
where user.sso_id='sam' and profile.type='ADMIN';
所以Sam有一个用户配置文件,这个配置文件的类型是“ADMIN”


UserProfile实体中的字段
type
映射到表
user\u profile
的列
type

谢谢您的快速响应。我对这个问题作了一些修改,以澄清我的疑问。你能看一下吗?我不知道你在附录中的意思。我不知道您是如何在数据库中定义列TESTTYPE的,您在该列中存储了什么值,getTestUserProfileType()是如何定义的,以及您正在调试什么。我将db数据从-->插入到USER_PROFILE(type)值('ADMIN');要-->在用户_配置文件(type,testtype)中插入值('ADMIN','TESTADMIN');我只是在枚举定义公共字符串getTestUserProfileType(){return testUserProfileType;}public void setTestUserProfileType(String testUserProfileType){this.testUserProfileType=testUserProfileType;}中对testUserProfileType使用了getter/setter,以及一个测试用例。并将代码作为代码而不是引号发布。您永远不会初始化枚举中的字段
testUserProfileType
。所以它是空的。请注意,枚举中字段的字符串值仅用于使用默认值初始化实体中的
type
字段。该字段的类型为字符串。枚举与JPA完全无关。它看到一个字符串字段,并用数据库中找到的字符串值填充。