我有一个遗留数据库表,为简单起见,它看起来像:
table address{
varchar line1
varchar line2
varchar line3
varchar(1) deliveryline
}
deliveryline
上有一个检查约束,保证其值为'1,'2', or '3'
。
这似乎是hibernate中枚举的一个很好的候选者。我有一个看起来像这个代表地址表的实体:
public class Address{
String line1;
String line2;
String line3;
DeliveryLine deliveryLine;
}
我通常在映射枚举时使用@Enumerated(EnumType.STRING)
,但该策略在此处不起作用。例如:
public enum DeliveryLine { 1,2,3 } 由于数据库(1,2,3)中的有效值不是有效的Java标识符,因此无法编译。
在hibernate中有一种直接强制映射的方法吗?
答案 0 :(得分:4)
查看hibernate.org所述的GenericEnumUserType
("灵活解决方案")
如果你正在使用Hibernate 4,你将不得不使用所讨论的修改版here
答案 1 :(得分:1)
由于您已锁定列类型的varchar,我认为您正在查看自定义UserType。例如:http://docs.jboss.org/hibernate/orm/4.0/manual/en-US/html/types.html#types-custom-ut