在 Hibernate 中注释枚举列表

发布于 2024-12-28 10:47:58 字数 548 浏览 0 评论 0原文

我在 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

问题在哪里?

I have this annotation in hibernat for list of Enums :

@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;

And problem is when i call search query execution it return this :

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

Where is problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

享受孤独 2025-01-04 10:47:58

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

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

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

您粘贴的片段可能会带来问题,即您使用 @Enumerated(EnumType.String) 将枚举值描述为 String 类型。我猜这会带来强制转换异常。也许EnumType.Ordinal会比较合适。我对此没有经验。我不定义任何东西就很好。

As I came here through searching for the solution:

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

did the job for me. Thanks for the hint to @ElementCollection I were not aware of it.

Your pasted snippped might bring the problem, that you describe your enum value to be of type String with @Enumerated(EnumType.String). I guss this brings in the cast exception. Maybe EnumType.Ordinal would be suiting. I am not experienced with that. I am fine by not defining anything.

旧人九事 2025-01-04 10:47:58

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

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

Change the @Column definition to include the defined enum values, e.g.

@Column(name="someTypeCd", nullable = false, columnDefinition="enum('VAL1', 'VAL2', 'VAL3', 'UNDEFINED')")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文