使用注释向 JPA 或 Hibernate 实体列添加约束

Jam*_*ams 5 java orm entity annotations hibernate

我想要一个实体的列,它只接受一组枚举值中的一个。例如,假设我有一个带有字符串列“petType”的 POJO/实体类“Pet”。我希望 petType 只允许以下三个值之一:“cat”、“dog”或“gorilla”。我将如何注释 getPetType() 方法以创建强制执行此操作的数据库级约束?

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

我曾尝试将参数化用户类型与 @Type 注释结合使用,但这似乎并未对数据库列本身提供任何类型的约束。除了在 columnDefinition 元素中使用一些 SQL 之外,似乎没有办法在 @Column 注释中指定这种约束,而且我很犹豫要不要走这条路,因为似乎无论我使用什么都不会有跨平台/数据库独立(对我来说很重要,因为我在 Oracle 上运行我的生产代码,但我使用 HSQLDB 和 Derby 在本地进行测试)。也许我想要做的只是使用注释无法完成。

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

Thi*_*Roy 4

创建 PetType 类型的枚举并将映射定义为

@Enumerated(EnumType.STRING)

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

  • 这在 Java/Hibernate 级别工作得很好,但是当 Hibernate 创建/更新架构时,不会创建对数据库列的约束,因此我最终在数据库表中得到一个不受约束的字符串列。如果数据被插入到我的 Hibernate 代码之外的表中,这是有问题的,因为可以将一个值插入到不是我指定的枚举值之一的列中。 (2认同)