子がコンポジットキーを持ち、その一部が親のプライマリキーであるHibernateで多対1の関連付けをどのようにマップしますか?
table parent (
parentid int (PK)
...
)
table child (
parentid int (PK)
childid int (PK)
...
)
、子の主キーの一部は、親の主キーです:
私はこのような少し見えます(レガシー)テーブル構造を持っています。私はこのように(xmlベースのHibernateを使用しています)
<hibernate-mapping>
<class name="com.example.MyParent" table="parent">
<id name="parentid" column="parentid" unsaved-value="0" >
<generator class="identity"/>
</id>
<set name="children" cascade="all">
<key>
<column name="parentid"/>
</key>
<one-to-many class="com.example.MyChild" />
</set>
...
</class>
<class name="com.example.MyChild" table="child">
<composite-id name="id" class="com.example.MyChildId">
<key-property name="parentid" column="parentid" />
<key-property name="childid" column="childid" />
</composite-id>
...
</class>
Javaクラス:
public void updateParent(MyParent param) {
ht.saveOrUpdate(param);
}
UPDATE: 間違ったリレーションタイプを使用しました)しかし、今私は別の問題がある:それは、テーブル内の子の行を作成するとき、親がnullであるようだ。 parentidは合成キーの一部であるため、挿入に失敗します。
ログから:
DEBUG SQL - insert into Child(PARENTID, CHILDID) values (?, ?)
TRACE IntegerType - binding null to parameter: 1
TRACE IntegerType - binding '5678' to parameter: 2
WARN JDBCExceptionReporter - SQL Error: -10, SQLState: 23502
ERROR JDBCExceptionReporter - integrity constraint violation: NOT NULL check constraint; SYS_CT_10028 table: Child
ありがとうございます。私は本当に間違ったマッピングを使用していましたが、これは私の問題を解決しませんでした。 – mranders