Hibernate/Spring:在单元测试中将集合与两个打开的会话关联的非法尝试
我在单元测试中看到了上面的错误,我不知道如何纠正它 我的单元测试类扩展了AbstractTransactionalDataSourceSpringContextTests并执行以下操作:Hibernate/Spring:在单元测试中将集合与两个打开的会话关联的非法尝试,spring,hibernate,Spring,Hibernate,我在单元测试中看到了上面的错误,我不知道如何纠正它 我的单元测试类扩展了AbstractTransactionalDataSourceSpringContextTests并执行以下操作: // Retrieve a RuleGroup RuleGroup ruleGroupToUpdate = ruleGroupDao.findRuleGroup(a, b, c, d); // Update an encapsulated Attribute // Save the RuleGroup rule
// Retrieve a RuleGroup
RuleGroup ruleGroupToUpdate = ruleGroupDao.findRuleGroup(a, b, c, d);
// Update an encapsulated Attribute
// Save the RuleGroup
ruleGroupDao.updateRuleGroup(ruleGroupToUpdate);
下面是我的规则组映射文件的一个片段。如您所见,规则组包含封装的规则和属性集合,默认情况下这两个集合都是延迟加载的:
<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>
我认为你根本没有交易。getHibernateTemplate()可以打开新会话。请参见此处的src代码:。一种常见的做法是使用spring的@Transactional注释将dao中的方法包装到事务中。如果不这样做,调用getSession()以外的任何函数都可能导致在事务外部打开新会话并导致泄漏
希望这能有所帮助。我想你根本没有交易。getHibernateTemplate()可以打开新会话。请参见此处的src代码:。一种常见的做法是使用spring的@Transactional注释将dao中的方法包装到事务中。如果不这样做,调用getSession()以外的任何函数都可能导致在事务外部打开新会话并导致泄漏
希望能有所帮助。谢谢您的回复。如果我不希望在DAO级别指定@Transactional,我还有什么其他选项?如果我在没有HibernteTemplate的情况下使用Hibernate,这会避免创建新会话吗?只是为了指定我的修复。我删除了AbstractTransactionalDataSourceSpringContextTests,并使用了Spring3单元测试支持,从而在我的每个单元测试上指定了@Transactional注释。因此,这在我的单元测试中提供了事务性支持,错误不再发生。谢谢谢谢你的回复。如果我不希望在DAO级别指定@Transactional,我还有什么其他选项?如果我在没有HibernteTemplate的情况下使用Hibernate,这会避免创建新会话吗?只是为了指定我的修复。我删除了AbstractTransactionalDataSourceSpringContextTests,并使用了Spring3单元测试支持,从而在我的每个单元测试上指定了@Transactional注释。因此,这在我的单元测试中提供了事务性支持,错误不再发生。谢谢