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

将休眠组件映射到单独的表

霍浩皛
2023-03-14
问题内容

是否可以配置Hibernate将html" target="_blank">组件类存储在单独的表中?

请看以下示例:

<class name="test.ClassA">
   <property name="propA"/>
   <component name="componentProp" class="test.ClassB">
      <property name="propB"/>
   </component>
</class>

这映射到一个MyClass具有两列propA和的表propB。我想要的是将组件的属性映射到名为的表ClassB


希望做的是配置ClassB在本身(它有没有意义的身份之外的实体ClassA),所以排除了正常的关联。另外,我无法修改对象模型(它是生成的代码),因此不能向引入ID属性ClassB

这似乎是Hibernate功能上的一个空白- 映射执行“多个类到一个表”,而 执行“一个类到多个表”,但是奇怪的是没有明显的区别。无需借助实体关联即可执行“多个类到多个表”的方法。

我这样做的理由是,我希望我的数据库模式尽可能类似于实际的对象模型,并且包括针对ClassB组件的单独表。我知道这不会扩展-
例如,您不能做嵌套的组件,但是在这种特殊情况下这不是问题。


问题答案:

可以 一起使用<join><component>,还是我误解了您的问题?

<class name="test.ClassA">
  <property name="propA"/>

  <join table="ClassB">
    <key column="ClassA_id" />
    <component name="componentProp" class="test.ClassB">
      <property name="propB"/>
    </component>
  </join>

</class>

尽管您(显然)确实需要外键,但不必在对象模型中将其映射。连接的详细信息在这里 -仅出于完整性目的提供,我知道 知道从何处获取它们:-)

上面链接中的文档没有明确说明在联接中映射组件的任何内容,但是DTD允许这样做,并且我已经在3.1中运行了它,因此我很确定它仍然可以正常工作。但是,不知道如何(或是否可能)将其与注释映射。



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

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

  • 问题内容: 我在MySQL表(TINYINT(1))中具有BOOLEAN类型,并且尝试映射实体中的布尔字段,但这会生成异常: 我将实体中的字段更改为字节并进行了相应的更改,因此它的作用是布尔值,我得到: 我尝试在字段上使用注释: 但我得到: 问题答案: 从我在这里读到的内容: org.hibernate.HibernateException:maegul.users中列admin的列类型错误。找到

  • 问题内容: 我有一张桌子DEAL和一张桌子DEAL_TYPE。我想映射以下代码: 问题在于数据已经存在于数据库中。而且我很难将类映射到数据库。 数据库看起来像这样: 我知道我可以在交易类型之间使用简单的@OneToMany关系,但是我更喜欢使用枚举。这可能吗? 我几乎可以通过使用EnumType.ORDINAL类型来使其工作。但不幸的是,我的交易类型表中的ID不是连续的,并且不是从1开始。 有什么

  • 问题内容: 有人可以解释在xml映射文件中使用逆函数的方法吗,我正在阅读本教程,但无法理解在映射文件中的逆函数的用法? 谢谢 问题答案: 逆仅决定关系中的哪个实体负责更新数据库以反映关联。 假设一对多的双向关联。代码A和B中有两个类,A包含一组B,B维护对A的引用。在数据库级别,只有一个外键要更新,B的表包含一个到主键的列的A。 在这种情况下,假设我们将inverse = true放在集合侧。这意

  • 问题内容: 我有一个颜色枚举 我有包含它的MyEntity。 我已经有一个UserType来映射我的枚举。 您知道如何在Hibernate hbm.xml中映射枚举集吗? 我需要一个UserType还是最简单的方法? 谢谢 编辑: 只是为了说明一下,我正在寻找 hbm.xml 配置而不是@CollectionOfElements注释 问题答案: 我使用EnumSet映射线程中的解决方案,该解决方案