gpt4 book ai didi

java - Hibernate - 如何映射 EnumSet

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:11 26 4
gpt4 key购买 nike

我有一个颜色枚举

public enum color { GREEN, WHITE, RED } 

我有包含它的 MyEntity。

public class MyEntity {
private Set<Color> colors;
...

我已经有一个 UserType 来映射我的枚举。
你知道如何在 Hibernate hbm.xml 中映射一组枚举吗?
我需要 UserType 还是有最简单的方法?
谢谢

编辑: 只是要说明一下,我正在寻找 hbm.xml 配置而不是 @CollectionOfElements 注释

最佳答案

我使用来自 EnumSet mapping 的解决方案依赖于使用 <element column> 的线程.您只需要一个带有 id 和字符串的表来映射集合(此处为 MYENTITY_COLOR)。映射看起来像这样(EnumUserType 是来自 Java 5 EnumUserType 的映射):

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<typedef name="color" class="com.stackoverflow.q2402869.EnumUserType">
<param name="enumClassName">com.stackoverflow.q2402869.Color</param>
</typedef>
<class name="com.stackoverflow.q2402869.MyEntity" entity-name="MyEntity" table="MYENTITY">
<id name="id" type="java.lang.Long">
<column name="ID" />
<generator class="assigned" />
</id>
<set name="colors" table="MYENTITY_COLORS">
<key column="ID" not-null="true"/>
<element type="color" column="COLOR"/>
</set>
</class>
</hibernate-mapping>

查询可能如下所示:

select distinct e from MyEntity e join e.colors colors where colors IN ('WHITE', 'GREEN')

整个解决方案适用于加载、保存和查询(归功于 jasonab)。

关于java - Hibernate - 如何映射 EnumSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2402869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com