我想将一个多对多的集合映射到一个子类,但是集合的关键是父类的一个属性。

目前,我正在像这样映射AbstractFoo Foo和Bar类:

<class name="AbstractFoo" abstract="true" table="abstractFoo">
  <id name="_id" column="foo_pk">
    <generator class="native" />
  </id>
  <many-to-one name="_bar" column="bar_fk">
  </many-to-one>
  <joined-subclass name="Foo" table="foo">
    <key column="abstractFoo_fk" />
    <property name="_type" column="type" />
  </joined-subclass>
</class>
<class name="Bar" table="bar">
  <map name="_foos" inverse="true">
    <key column="bar_fk"/>
    <map-key column="type">
    <one-to-many class="Foo" />
  </map>
</class>


实际上,当我使用该映射时,Hibernate试图在表foo上而不是abstractFoo上找到bar_fk列。

有什么办法可以做这样的事情吗?

最佳答案

如果我正确理解了您的问题,那么我认为这是不可能的。如果Bar类对Foo进行了引用,则使用当前配置生成的FK是正确的。如果您希望Bar引用AbstractFoo,则它将创建FK到abstractFoo表,并允许AbstractFoo的任何子类成为对Bar的引用。

通常这实际上是您想要的...对超类的引用。但是,在不了解您的设计的情况下,如果您确实真的需要引用该子类,那么您的配置是正确的。

关于java - 当键在父类中时,如何将一对多集合映射到联接的子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1940331/

10-10 13:25