ユーザーとその外部表現の間の OneToOne 関係をマップするために、休止状態 (3.6.0) Join 関係を使用しています。
パフォーマンス ガイダンスにより、1 対 1 のマッピングではなく Join を使用しました。問題は、ExternalUser が削除されるたびに、Hibernate が InternalUser
も削除することです。
on-delete="noaction"
は、休止状態の参照に従ってカスケード削除を無効にします。
セクション 5.1.21。キー: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html
クラスのマッピング:
<class name="com.example.ExternalUser" table="externalusers" dynamic-update="true" dynamic-insert="true" schema="mySchema">
<id name="externalUserGuid" >
<column name="externalUserGuid" sql-type="uniqueidentifier"/> <generator class="guid"/>
</id>
<property name="id" column="Id" update="false"/>
<property name="name" column="Name"/>
<property name="lastName" column="LastName"/>
<join table="users" optional="true" schema="mySchema" >
<key column="GUID" on-delete="noaction" update="false"/>
<property name="userId" column="Id" update="false" />
</join>
</class>
<class name="com.example.InternalUser" table="users" dynamic-update="true" dynamic-insert="true" schema="mySchema">
<id name="id" column="Id">
<generator class="assigned"/>
</id>
<property name="userName" column="UserName" />
<property name="password" column="Password" />
<property name="registrationStatus" column="Enabled" />
<property name="unlockedAt" column="UnlockedAt" />
<property name="registeredAt" column="RegisteredAt" />
Join タグに逆属性を追加すると問題は解決しますが、on-delete="noaction" が hibernate によって無視された理由を理解したいと思います。