我有一个包含枚举属性的实体。该属性可以是我的代码库中任何一种类型的枚举:
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持久化但后来被拉出到正确的枚举类型?
答案 0 :(得分:3)
您需要为枚举定义custom UserType。
答案 1 :(得分:2)
一般来说,你不应该这样做。如果可以将两个(或多个枚举)分配给同一个字段,则将它们合并为一个anum。
如果你正在使用继承,比如:Vehicle
有两个子类 - Boat
和Car
,那么你可以在每个子类中有一个不同的字段 - 毕竟每个枚举都是仅与特定类型相关。所以:
@Column
private BoatType boatType;
答案 2 :(得分:0)
我不认为这可以很容易地使用多个Enum类型试图在同一个属性中共存。 hibernate如何知道在将字段加载到数据库之外应该实例化哪个Enum类?
如果你真的想要这样做,你需要以某种方式编码枚举类+每次持久保存此属性时的值(使用自定义UserType作为duffymo建议)。
你能不能把它分成两个属性,每个枚举一个?然后你可以将enumValue(和enumValue2)声明为正确的类,它将开箱即用。