当前位置: 首页 > 面试题库 >

Hibernate-如何映射EnumSet

欧阳睿范
2023-03-14
问题内容

我有一个颜色枚举

public enum color { GREEN, WHITE, RED }

我有包含它的MyEntity。

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

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

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


问题答案:

我使用EnumSet映射线程中的解决方案,该解决方案依赖于的使用<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)。



 类似资料:
  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

  • 我创建了一个使用Hibernate进行持久化的应用程序,我尝试映射映射,但遇到了一些错误:“IllegalArgumentException”和“完整性约束冲突:外键无操作” 映射文件为: 该类拥有一个绑定列表: 和他的映射: 错误日志: 提前感谢您的回答

  • 下列的 XML 映射应该是很直白的。例如: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hib

  • 问题内容: 我需要预先将未实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate本身是否支持此功能?)。 问题答案: 可以创建一个自定义(例如thi

  • 问题内容: Hibernate提供的注释支持使用或的两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即hibernate尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了

  • 问题内容: 我的问题围绕着我想用JPA映射的以下结构: 我的POJO非常简单(没有复合类型等,只有一些原语)。 如何在链接的问题中实施建议?我该如何仅用部分进行注释(当我仅对字段进行注释时,会发生类转换错误,因为HashMap无法转换为Blob,这是问题的根源- 我不能仅对值部分进行注释地图)? 我不确定是否需要使包装类型实现实现可包装List的Serializable,还是仅使用ArrayLis