ste*_*mac 5 java enums annotations hibernate
我有一个现在的数据库,我现在正在使用hibernate连接.我现在无法更改其中的数据,并使所有内容与单个列分开.
我有一个具有以下值的状态列:
该列映射如下:
@Column(name = "STATUS", nullable = false, length = 50)
@Enumerated(EnumType.STRING)
private TeamMemberStatus status;
Run Code Online (Sandbox Code Playgroud)
我真的希望(出于应用程序的原因)将此列映射为Java Enum(TeamMemberStatus),但由于'new'是Java中的关键字,我不能将其作为枚举成员.
如果我有enum contstants NEW,MAILED,IN和OUT hibernate失败,因为在EnumType内部它会执行一个Enum.valueOf().
有没有办法让我把它映射到我的Enum而不必编写复杂的UserType?
- 添加内容
我的Enum是这样的:
public enum TeamMemberStatus {
NEW, MAILED, IN, OUT
}
Run Code Online (Sandbox Code Playgroud)
是一个有效的Java枚举,但不匹配数据库的情况.如果我改变它以匹配数据库,如:
public enum TeamMemberStatus {
new, mailed, in, out
}
Run Code Online (Sandbox Code Playgroud)
它不会编译,因为'new'是Java保留字.
如果您可以在数据库中使用 SQL UPPER 语句,则无需使用任何 UserType 即可工作
更新
好吧,它不可能是最好的解决方案,但它解决了你想要的
@Entity
public class WrapperEntity {
private TeamMemberStatus memberStatus;
@Transient
private TeamMemberStatus getMemberStatus() {
return this.memberStatus;
}
public void setMemberStatus(TeamMemberStatus memberStatus) {
this.memberStatus = memberStatus;
}
@Column(name="STATUS", nullable=false, length=50)
public String getMemberStatusAsString() {
return memberStatus.name().toLowerCase();
}
public void setMemberStatusAsString(String memberStatus) {
this.setsetMemberStatus(TeamMemberStatus.valueOf(memberStatus.toUpperCase()));
}
Run Code Online (Sandbox Code Playgroud)
}