2010-08-27 117 views
4

我想要一个只接受枚举值集合之一的实体列。例如,假设我有一个POJO /实体类“Pet”,其字符串列为“petType”。我希望petType只允许三个值之一:“猫”,“狗”或“大猩猩”。我将如何去注释getPetType()方法以创建一个强制执行此操作的数据库级别约束?使用注解将约束添加到JPA或Hibernate实体列

我允许Hibernate通过将Hibernate属性“hbm2ddlauto”设置为“update”在应用程序启动时创建或更新我的数据库表。

我已经尝试使用与@Type注释关联的参数化用户类型,但是这似乎没有提供任何对数据库列本身的约束。似乎没有在@Column注释中指定这种约束的方法,但没有在columnDefinition元素中使用某些SQL,并且我很犹豫要走这条路线,因为看起来无论我使用什么都不会跨平台/数据库独立(对我来说很重要,因为我在Oracle上运行我的代码,但是我使用HSQLDB和Derby在本地进行测试)。也许我想做的只是简单地使用注释来完成。

在此先感谢您提供有关此主题的任何见解。

+0

同样的问题在这里。令人惊讶的是,似乎没有办法解决这个问题? – stian 2011-04-18 11:07:36

回答

3

创建类型PetType的枚举和定义你的映射为

@Enumerated(EnumType.STRING)

这样,字符串存储在数据库中,你的java枚举类型只接受您指定的3个值。

+2

这在Java/Hibernate级别上工作正常,但是当Hibernate创建/更新架构时,不会创建数据库列上的约束,因此最终会在数据库表中出现无约束的字符串列。这在数据插入到我的Hibernate代码之外的表中的情况下是有问题的,因为可以将值插入不是我指定的枚举值之一的列中。 – 2010-08-30 20:06:58