在JPA 2.1中使用@Convert正确完成映射枚举

本文探讨了在JPA 2.1中如何使用@Convert来有效处理枚举映射,避免了传统方法的局限性和潜在问题。通过示例展示了如何在Eclipselink支持的Spring Data JPA中实现自定义转换器,以实现枚举的灵活、安全映射,确保在修改枚举时不影响现有记录。
摘要由CSDN通过智能技术生成

如果您曾经在JPA中使用过Java枚举,那么您肯定会意识到它们的局限性和陷阱。 使用enum作为@Entity的属性通常是一个很好的选择,但是2.1之前的JPA不能很好地处理它们。 它给了您2 + 1个选择:

托肖夫达林

托肖夫达林

  1. @Enumerated(EnumType.ORDINAL) (默认值)将使用Enum.ordinal()映射enum值。 基本上,第一个枚举值将在数据库列中映射为0 ,第二个映射为1 ,依此类推。这非常紧凑,并且在要修改枚举时非常有用。 在中间删除或增加值或重新排列它们将完全破坏现有记录。 哎哟! 更糟糕的是,单元测试和集成测试通常在干净的数据库上运行,因此它们不会发现旧数据之间的差异。
  2. @Enumerated(EnumType.STRING)更安全,因为它存储enum字符串表示形式。 现在,您可以安全地添加新值并移动它们。 但是,重命名Java代码中的enum仍会破坏DB中的现有记录。 更重要的是,这种表示非常冗长,不必要地消耗了数据库资源。
  3. 您还可以使用原始表示形式(例如single charint ),并在@PostLoad / @Pre
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值