将hibernate组件映射到单独的表

ska*_*man 7 java hibernate

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

请看以下示例:

<class name="test.ClassA">
   <property name="propA"/>
   <component name="componentProp" class="test.ClassB">
      <property name="propB"/>
   </component>
</class>
Run Code Online (Sandbox Code Playgroud)

这映射到一个称为表MyClass有两列propApropB.我想要的是将组件的属性映射到一个名为的表ClassB.

希望做的是配置ClassB本身作为一个实体(它之外没有意义的身份ClassA),这样排除了正常的关联.另外,我无法修改对象模型(它生成的代码),因此我无法引入ID属性ClassB.

这似乎是在Hibernate的功能的间隙 - 在<部件>映射执行"多类对一表",并<加入>不"一类到多表",但奇怪的没有明显的做"多个类到多个表"的方式,而不依赖于实体关联.

我想要这样做的理由是,我希望我的数据库模式尽可能地与对象模型相似,并且包括ClassB组件的单独表.我知道这不会扩展 - 例如,你不能做嵌套组件,但在这种特殊情况下这不是问题.

Chs*_*y76 7

可以使用<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>
Run Code Online (Sandbox Code Playgroud)

虽然您(显然)确实需要外键,但它不必映射到对象模型中.关于加入的详细信息在这里 - 仅为完整性而提供,我知道知道从哪里获取它们:-)

上面链接中的文档没有明确说明在连接中映射组件的任何内容,但是DTD允许它并且我已经在3.1中使用它,所以我很确定它仍然可以正常工作.但是,不知道如何(或是否可能)使用注释来映射它.