小编典典

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

hibernate

是否可以配置Hibernate将组件类存储在单独的表中?

请看以下示例:

<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组件的单独表。我知道这不会扩展-
例如,您不能做嵌套的组件,但是在这种特殊情况下这不是问题。


阅读 291

收藏
2020-06-20

共1个答案

小编典典

可以 一起使用<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中运行了它,因此我很确定它仍然可以正常工作。但是,不知道如何(或是否可能)将其与注释映射。

2020-06-20