代码之家  ›  专栏  ›  技术社区  ›  James Adams

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

  •  4
  • James Adams  · 技术社区  · 15 年前

    我想要一个实体的列,它只接受枚举的一组值中的一个。例如,假设我有一个POJO/entity类“Pet”,它有一个字符串列“petType”。我希望petType只允许三个值之一:“cat”、“dog”或“gorilla”。我应该如何注释getPetType()方法,以便创建一个数据库级别的约束来实现这一点?

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

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

    提前感谢你对这个话题的任何见解。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Thierry Roy    15 年前

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

    @枚举(EnumType.STRING)

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