ユニットテストで上記のエラーが表示され、修正方法がわかりません。
私の単体テストクラスはAbstractTransactionalDataSourceSpringContextTestsを拡張し、以下を実行します。
// Retrieve a RuleGroup
RuleGroup ruleGroupToUpdate = ruleGroupDao.findRuleGroup(a, b, c, d);
// Update an encapsulated Attribute
// Save the RuleGroup
ruleGroupDao.updateRuleGroup(ruleGroupToUpdate);
以下は、私のRuleGroupマッピングファイルのスニペットです。ご覧のとおり、RuleGroupにはRuleコレクションとAttributeコレクションがカプセル化されており、どちらもデフォルトで遅延ロードされます。
<class name="a.b.c.d.RuleGroup" table="RULE_GROUP">
<id name="ruleGroupID" column="RULE_GRP_ID">
<generator class="increment"/>
</id>
<set name="rules" lazy="true" cascade="save-update" table=RULES">
<key column="RULE_GRP_ID" not-null="false"/>
<many-to-many unique="true" column="RULE_ID" class="a.b.c.d.Rule"/>
</set>
<set name="attributes" lazy="true" cascade="save-update" table="ATTRIBUTES">
<key property-ref="xrefID" column="XREF_ID" not-null="true"/>
<many-to-many unique="true" column="CONFIG_ATTR_ID" class="a.b.c.d.Attribute"/>
</set>
</class>
私のDAOクラスはHibernateDaoSupportを拡張します:
テストのデバッグから、新しいセッションがfindRuleGroupメソッドで作成され、次にupdateRuleGroupメソッドで作成されます。したがって、更新が実行されると、Hibernateは私の属性コレクションがすでにfindRuleGroupセッションに関連付けられていることを確認し、例外をスローします。
これを解決するにはどうすればよいですか?おそらく、更新によって新しいセッションが開かれることはありません。HibernateTemplateが新しいセッションを作成しないように指定すると、スレッドに関連付けられたセッションがないという別の例外が発生します。私はここで途方に暮れています!