Java 使用枚举的优点
我正在经历一个春季冬眠的例子 您好,这里作者使用enum进行默认初始化(感谢JB Nizet理解这一点)。但是如果没有这个初始化,它可以正常工作。那么使用这个枚举还有其他好处吗 使用枚举的代码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
@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完全无关。它看到一个字符串字段,并用数据库中找到的字符串值填充。