【问题标题】:Annotating List of Enums in Hibernate在 Hibernate 中注释枚举列表
【发布时间】:2012-02-14 12:37:50
【问题描述】:

我在 hibernat 中有这个注解用于枚举列表:

@CollectionOfElements(targetElement = SomeType.class)
@JoinTable(name = "table_name",
    joinColumns = @JoinColumn(name = FK_NAME)
)
@Column(name = "someTypeCd", nullable = false)
@LazyCollection(LazyCollectionOption.FALSE)
@GeneratedValue(strategy=GenerationType.AUTO)
@Enumerated(EnumType.STRING)
private List<SomeType> someType;

问题是当我调用搜索查询执行时它返回:

java.lang.ClassCastException - java.lang.String cannot be cast to java.lang.Enum

问题出在哪里?

【问题讨论】:

    标签: java hibernate jakarta-ee enums annotations


    【解决方案1】:

    当我通过寻找解决方案来到这里时:

    @Column
    @Enumerated
    @ElementCollection(targetClass = MyEnum.class)
    private List<MyEnum> values;
    

    为我完成了这项工作。感谢@ElementCollection 的提示,我不知道。

    您粘贴的片段可能会带来问题,即您将枚举值描述为带有@Enumerated(EnumType.String) 的字符串类型。我猜这会带来演员阵容异常。也许EnumType.Ordinal 会很合适。我对此没有经验。我什么都不定义也没关系。

    【讨论】:

      【解决方案2】:

      更改@Column 定义以包含已定义的枚举值,例如

      @Column(name="someTypeCd", nullable = false, columnDefinition="enum('VAL1', 'VAL2', 'VAL3', 'UNDEFINED')")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-15
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多