我想将一个多对多的集合映射到一个子类,但是集合的关键是父类的一个属性。
目前,我正在像这样映射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/