使用注释的Hibernate Enum映射
我有一个现在的数据库,我现在使用hibernate连接到。 我目前无法更改其中的数据,并使所有内容与单列无关。
我有一个状态列,其值为:
- 新
- 邮寄
- 在
- 出
该列映射如下:
@Column(name = "STATUS", nullable = false, length = 50) @Enumerated(EnumType.STRING) private TeamMemberStatus status;
我真的希望(出于应用程序的原因)将此列映射为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 }
是一个有效的Java枚举,但不匹配数据库的情况。 如果我更改它以匹配数据库,如:
public enum TeamMemberStatus { new, mailed, in, out }
它不会编译,因为’new’是Java保留字。
如果您可以在数据库中使用SQL UPPER语句 ,它将在不使用任何UserType的情况下工作
UPDATE
好吧,它不是最好的解决方案,但它解决了你想要的
@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())); }
}
如果您的数据库值是“新”,“邮寄”,“输入”和“输出”,那么您的枚举需要完全相同的名称。 – 我认为问题在于,您的枚举是大写字母,但您的数据库值不是。