为了简化起见,我有一个旧的数据库表,看起来像:

  table address{
    varchar line1
    varchar line2
    varchar line3
    varchar(1) deliveryline
  }


deliveryline上有一个检查约束,以确保其值为'1,'2', or '3'

这似乎是休眠中枚举的一个不错的选择。我有一个看起来像这样的实体,代表了地址表:

  public class Address{
    String line1;
    String line2;
    String line3;
    DeliveryLine deliveryLine;
  }


通常在映射枚举时使用@Enumerated(EnumType.STRING),但是该策略在这里不起作用。例如:

公共枚举DeliveryLine {
 1,2,3
}
  由于数据库(1,2,3)中的有效值不是有效的Java标识符,因此无法编译。

有没有一种简单的方法可以在休眠状态下强制此映射?

最佳答案

查看hibernate.org中描述的GenericEnumUserType(在“灵活的解决方案”下)

如果您使用的是Hibernate 4,则必须使用修改过的版本,如here所述

08-04 00:02