Java 将hibernate组件映射到单独的表

Java 将hibernate组件映射到单独的表,java,hibernate,Java,Hibernate,是否可以将Hibernate配置为将组件类存储在单独的表中 以以下为例: <class name="test.ClassA"> <property name="propA"/> <component name="componentProp" class="test.ClassB"> <property name="propB"/> </component> </class> 这映射到一个名

是否可以将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
之外没有有意义的标识),这样就排除了正常的关联。此外,我不能修改对象模型(它是生成的代码),因此我不能向
ClassB
引入ID属性

这似乎是Hibernate功能上的一个缺口——映射执行“多个类到一个表”,并执行“一个类到多个表”,但奇怪的是,如果不借助实体关联,就没有明显的方法执行“多个类到多个表”


我希望这样做的理由是,我希望我的DB模式尽可能接近对象模型,这包括
ClassB
组件的单独表。我知道这不会扩展-例如,你不能做嵌套组件,但在这种特殊情况下这不是问题。

你可以将
一起使用,还是我误解了你的问题

<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中使用过它,所以我非常确定它仍然可以正常工作。不过,我不知道如何(或者是否可能)用注释来映射它。

啊,这看起来正是我需要的,谢谢。我会带她出去转转,看看这是不是一张罚单。我在“带Hibernate的Java持久化”的第8.1.3节中找到了这项技术。看起来不错。再次感谢。我将连接和组件一起使用,但它导致hibernate触发连接查询事件。我添加fetch=“select”如何使组件延迟初始化?