JPA枚举比较不等于失败问题,怎么解决
发布网友
发布时间:2022-04-26 00:18
我来回答
共2个回答
热心网友
时间:2023-10-23 10:14
Enumerated提供了两种持久化枚举的方式,EnumType.ORDINAL和EnumType.STRING,但都有很大的局限性,让人很难选择,经常不能满足需求
EnumType.ORDINAL:按枚举的顺序保存数字
有一些我项目不能容忍的局限性,比如
1、顺序性 - java枚举的顺序从0开始递增,没法自己指定,我有些枚举并不是从0开始的,或者不是+1递增的,比如一些行业的标准代码。
2、旧数据可能不兼容,比如-1代表删除,映射不了
3、不健壮 - 项目那么多人开发,保不准一个猪队友往枚举中间加了一个值,那完了,数据库里的记录就要对不上了。数据错误没有异常,发现和排查比较困难
EnumType.STRING:保存枚举的值,也就是toString()的值
同样有局限性:
1、String类型,数据库定义的是int,即使override toString方法返回数字的String,JPA也保存不了
2、同样不适用旧数据,旧数据是int
3、不能改名,改了后数据库的记录映射不了
我对枚举需求其实很简单,1是保存int型,2是值可以自己指定,可惜默认的那两种都实现不了。
没办法,只能考虑在保存和取出的时候自己转换了,然后很容易就找到实体转换器AttributeConverter,可以自定义保存好取出时的数据转换,Yeah!(似乎)完美解决问题!
热心网友
时间:2023-10-23 10:14
枚举类型是一种的值类型,它用于声明一组命名的常数。 声明的时候,应该在主class下。 调用的时候,应该重新写方法调用。 //声明枚举 public enum DirectOfMove { Left, Up, Right, Down, } DirectOfMove moveDirect = DirectOfMove.Up; //调用枚举方法 private void Compare() { if (moveDirect == DirectOfMove.Up) { Response.Write(“相等"); } else { Response.Write(“不相等"); } } 你这么写试试。 PS:你这2个值根本就是一样的,没啥可比较的啊。。。