テーブル間にOneToMany接続があります結果およびResultAuxResultAuxオブジェクトをの結果から取得できます。その後、ResultAuxオブジェクトを追加して、mergeを設定して、データベースに変更をフラッシュします。このように:私は知っている必要がありますいくつかの追加措置についてはHibernate:新規または古いレコード
Set<ResultAux> resultAuxes = result.getResultAuxes();
if (resultAuxes != null) {
for (ResultAux resultAux : resultAuxes) {
resultAux = getDaoFactory().getResultAuxDAO().merge(resultAux);
}
}
エントリに新しいレコードを設定して、テーブルに挿入されるか、それが更新され、古いものと、(変更されたりしない)です。私はのすべてのエントリResultAuxがすでにIDを持っていることに気付いたので、私はnullのためにそれをチェックすることができませんでした。そのようなものを決める方法はありますか(特に余分なライブラリは必要ありません)?
EDIT:私は私の答えはあなたの問題を解決しますが、@EugenioCuevasコメントに戻ってくることはよく分からない
<hibernate-mapping>
<class name="ResultAux" table="RESULT_AUX">
<id name="id" column="ID">
<generator class="native" />
</id>
<property name="additinalInfoType" column="AITYPE" type="dao.hibernate.utl.AdditinalInfoEnumType" />
<property name="sorter" column="SORTER" />
<property name="value1" column="VAL1" />
<property name="value2" column="VAL2" />
<many-to-one name="result" column="RESULT_ID" class="Result" />
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="Result" table="RESULT">
<id name="id" column="ID">
<generator class="native" />
</id>
<property name="questionNumber" column="Q_NUM" />
<property name="answerNumber" column="A_NUM" />
<property name="questionGroup" column="Q_GRP" />
<property name="answerValue" column="A_VAL" />
<set name="resultAuxes" inverse="true" cascade="all-delete-orphan"
lazy="false">
<key column="RESULT_ID" />
<one-to-many class="ResultAux" />
</set>
</class>
</hibernate-mapping>
非永続エンティティにはIDが設定されていないと言います。あなたはセットのすべてのエントリがIDを持っていると確信していますか? – sp00m
私はresultAuxでマージを使うべきではないと思っていますが、結果クラスでは、hibernateは1対多リレーションを処理する必要があります。マッピング設定も投稿できますか? –
@ sp00m:Hibernateは私の強い側ではありません。 Resultオブジェクトから取得したResultAuxセットにエントリを追加するときに何が起こるかについていくつかの疑問があります。また、Resultのセットは与えられたコードの上に永続化されます。おそらく、このコード実行の時点でResultAuxが永続的になるのはカスケードしているのかもしれません。 –