我正在将一个应用程序从Spring 3迁移到Spring 4。特别是,我正在将其迁移到
<spring.version>4.2.9.RELEASE</spring.version>
<org.springframework.ws.version>3.0.8.RELEASE</org.springframework.ws.version>
<hibernate.version>4.3.11.Final</hibernate.version>
这是与Spring 3一起使用的原始代码:
public AcmeUserBean loadUserByDn(String userDn) {
AcmeUserBean result = null;
Session session = null;
try {
session = this.currentSession();
Transaction tx = session.beginTransaction();
Query query = session.createQuery(
"from AcmeUserBean as user where user.distinguishedName = :userDn");
query.setString("userDn", userDn);
List objs = query.list();
if (objs != null && objs.size() > 0) {
result = (AcmeUserBean) objs.get(0);
}
tx.commit();
session.close();
return result;
} finally {
if (session != null) {
session.flush();
session.close();
}
}
}
在Spring 4中,我将其更新为:
@Transactional
public AcmeUserBean loadUserByDn(String userDn) {
AcmeUserBean result = null;
Session session = null;
try
{
session = this.getSessionFactory().getCurrentSession();
Query query = session.createQuery(
"from AcmeUserBean as user where user.distinguishedName = :userDn");
query.setString("userDn", userDn);
List objs = query.list();
if (objs != null && objs.size() > 0) {
result = (AcmeUserBean) objs.get(0);
}
return result;
} finally {
if (session != null) {
session.flush();
session.close();
}
}
}
方法中的每一行都成功,并且返回行的结果不为空。但是,当方法退出时会发生异常:
org.springframework.transaction.TransactionSystemException:无法提交Hibernate事务;嵌套异常org.hibernate.TransactionException:提交失败
包含的类是一个“Dao”类,并被注释为@Repository。
首先,我的代码迁移正确吗?第二,是什么导致了异常,我如何修复它?
这可能是因为会话已关闭。在使用Spring管理的事务(@Transactional)的方法中,Spring将处理会话提交和会话关闭。如果您执行会话。close()
,将出现上述错误。注释会话。close()
并尝试。
@Transactional
public AcmeUserBean loadUserByDn(String userDn) {
AcmeUserBean result = null;
Session session = this.getSessionFactory().getCurrentSession();
Query query = session.createQuery(
"from AcmeUserBean as user where user.distinguishedName = :userDn");
query.setString("userDn", userDn);
List objs = query.list();
if (objs != null && objs.size() > 0) {
result = (AcmeUserBean) objs.get(0);
}
return result;
}
在这个问题中,我正在使用Hibernate 4.3.4。最终和SpringORM 4.1.2。释放。 我有一个User类,它包含这样的一组Card实例: 我有几种类型的卡,每种都分别扩展Card基类和CardInstance基类,如下所示: 如果我将UnitCardInstance或HeroCardInstance添加到cards集合并保存实体,则一切正常。但是,如果我向集合中添加AbilityC
我需要你帮我把冬眠映射成一对多我不知道为什么这是错的 另一类: 映射 另一个映射: Hibernate配置 这就是错误: 如果有人能帮我,我非常感激,谢谢!
我正在尝试从当前用户那里获取特定租金的列表。 控制器中的代码: account\u id是外键。 运行后,我发现错误: 我做错了什么?
我想写一个简单的不存在的地方子句HQL查询。我不熟悉Hibernate,我有一些小问题。 我的查询如下所示: 我想选择所有包含IDUser当天购买的门票的天数。所有这些都与id为IDFest的节日相关。 我的堆栈跟踪: 映射类: Day.java Festivals.java 门票。Java语言
问题: 我是否需要删除接口IAbstractUserService上的泛型? 是否与此答案的类型擦除有关?https://stackoverflow.com/a/31266152/6698175 问题: 我得到了这个例外: <代码>组织。冬眠ErrorClassException:对象[id=1]不属于指定的子类[com.faz.idb.models.advisor]:加载的对象属于错误的com类
从2.1.0迁移的Springboot版本2.2.1