对于JPA 2.1之前的版本,JPA仅提供两种方法来按枚举name或按枚举处理枚举
ordinal。而且标准的JPA不支持自定义类型。所以:
- 如果要进行自定义类型转换,则必须使用提供程序扩展(带有Hibernate UserType,Eclipselink Converter等)。(第二个解决方案)。〜或〜
- 你必须使用
@PrePersist
和@PostLoad
技巧(第一个解决方案)。〜或〜 - 注释
getter
和setter
获取并返回int
值〜或〜 - 在实体级别使用整数属性,并在
getter
和setter
中执行转换。
我将说明最新的选项(这是一个基本实现,请根据需要进行调整):
@Entity@Table(name = "AUTHORITY_")public class Authority implements Serializable { public enum Right { READ(100), WRITE(200), EDITOR (300); private int value; Right(int value) { this.value = value; } public int getValue() { return value; } public static Right parse(int id) { Right right = null; // Default for (Right item : Right.values()) { if (item.getValue()==id) { right = item; break; } } return right; } }; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "AUTHORITY_ID") private Long id; @Column(name = "RIGHT_ID") private int rightId; public Right getRight () { return Right.parse(this.rightId); } public void setRight(Right right) { this.rightId = right.getValue(); }}


