繁体   English   中英

使用Hibernate持久化原始Java Enum

[英]Persist raw Java Enum using Hibernate

我有一个包含枚举属性的实体。 该属性可以是我的代码库中的任何一种类型的枚举:

public enum AutomobileType {
   CAR, TRUCK, MOTORCYCLE
}

public enum BoatType {
   ROW_BOAT,YACHT,SHIP
}

@Entity
public class FooBar {

  @Enumerated(value=EnumType.ORDINAL)
  private Enum enumValue;

  public void setEnumValue(Enum value) { ... }
  public Enum getEnumValue() { ... }
}

这失败了,有一个例外,“错误的数据类型:对于输入字符串:”[B @ f0569a“。我改变了FooBar将属性存储为有效的整数,但这不是我需要的。我需要实际的枚举。任何建议关于如何使这个工作,以便枚举可以作为int持久化,但后来拉出正确的枚举类型?

您需要为Enum定义自定义UserType

一般来说,你不应该这样做。 如果可以将两个(或多个枚举)分配给同一个字段,则将它们合并为一个anum。

如果你正在使用继承,例如:具有两个子类的Vehicle - BoatCar ,那么你可以在每个子类中有一个不同的字段 - 毕竟每个枚举只与特定类型相关。 所以:

@Column
private BoatType boatType;

我不认为这可以很容易地使用多个Enum类型试图在同一属性中共存。 当hibernate从DB加载字段时,它如何知道它应该实例化哪个Enum类?

如果你真的想要这样做,你需要以某种方式编码枚举类+每次持久化这个属性的值(使用自定义UserType作为duffymo建议)。

你能不能把它分成两个属性,每个枚举一个? 然后你可以将enumValue(和enumValue2)声明为正确的类,它将开箱即用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM