在每个具体一对一的表类结构中创建外键
TL;DR如何强制执行 Hibernate 架构创建,以便在下表中为每个具体类设置从 到 为下面显示的结构创建外键约束,而无需向 ?AbstractProperty.ownerId
Owner.ownerId
Owner
AbstractProperty
我正在处理一个项目,其中我具有以下类结构:
具有到 的 一对一映射,该映射由类扩展(以及其他类似 ,但这与本问题的其余部分并不相关)。Owner
AbstractProperty
ConcreteProperty
AnotherProperty
实际上只有一个属性,即 .因此,我们希望使用表-per-concrete-class结构,最终得到其他扩展类的 table 、 和 table ()。AbstractProperty
abstractPropertyId
Owner
ConcreteProperty
AbstractProperty
AnotherProperty
为此,我为以下映射创建了以下映射:Owner
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example">
<class name="Owner">
<id name="ownerId">
<generator class="identity"/>
</id>
<property name="ownerProperty"/>
<one-to-one name="abstractProperty"/>
</class>
</hibernate-mapping>
对于 :AbstractProperty
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example">
<class name="AbstractProperty" abstract="true">
<id name="ownerId">
<generator class="foreign">
<param name="property">ownerId</param>
</generator>
</id>
<union-subclass name="ConcreteProperty">
<property name="concreteProperty"/>
</union-subclass>
<union-subclass name="AnotherProperty">
<property name="anotherProperty"/>
</union-subclass>
</class>
</hibernate-mapping>
这有效。
但是,这是我的问题,使用此映射并让Hibernate为我创建架构(),它不会创建从数据库字段到字段的外键约束。当我创建反向约束的一对一字段时,它从 to 使用此映射 (其中字段在 java 类中是类型):<property name="hbm2ddl.auto">create</property>
ConcreteProperty.ownerId
Owner.ownerId
AbstractProperty
Owner
AbstractProperty
owner
Owner
AbstractProperty
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example">
<class name="AbstractProperty" abstract="true">
<id name="ownerId">
<generator class="foreign">
<param name="property">ownerId</param>
</generator>
</id>
<one-to-one name="owner" constrained="true"/>
<union-subclass name="ConcreteProperty">
<property name="concreteProperty"/>
</union-subclass>
<union-subclass name="AnotherProperty">
<property name="anotherProperty"/>
</union-subclass>
</class>
</hibernate-mapping>
如何强制创建外键 from 到,而不在我的字段中使用此字段?AbstractProperty.ownerId
Owner.ownerId
Owner
AbstractProperty