在研究SpingSide Hibernate DAO层。对数据的操作时发现了一个非常奇怪的问题。
我通过一个java 的主程序 main() 方法 去调用HibernateDao()里的删除方法。console 控制台只有查询出对象的操作,没有输出删除的操作。程序这样操作的。
主程序 main() 方法这样定义
SessionFactory sf2 = new Configuration().configure().buildSessionFactory();
HibernateDao hd = new HibernateDao(sf2,Test.class);
hd.delete(6); //6 是test 表里的id主键。
在HibernateDao 继承了SimpleHibernateDao类,在simpleHibernateDAO中 delete()方法抵用get(id) 获取这个对象,然后传入delete(final T entity)对象的删除操作。这个删除的方法是这样定义的。
Assert.notNull(entity, "entity不能为空");
Transaction tx = this.getSession().beginTransaction();
this.getSession().delete(entity);
tx.commit();
this.getSession().close();
logger.debug("delete entity: {}", entity);
程序运行控制台不报错误。但是却没有输出Hibernate的删除的sql语句。
我把出现的问题放到getSession() 中获得的session 是否是主程序传递过来的SessionFactory。
getSeesion的方法是这样定义的。
this.session=this.sessionFactory.openSession();
return this.session;
测试sessionFactory 就是主程序 SessionFactory sf2 = new Configuration().configure().buildSessionFactory(); 就是传递过来的sessionFactory。
查看simpleHibernateDAO的构造函数
public SimpleHibernateDao(SessionFactory sessionFactory, final Class entityClass) {
this.sessionFactory = sessionFactory;
this.entityClass = entityClass;
//this.session =sessionFactory.openSession();
}
也很正常,没有错误。
于是我在SimpleHibernateDao构造函数中最后一行加入this.session =sessionFactory.openSession(); 不用getSession() 方法获取session,就可以执行删除操作了。
很奇怪,为什么这样就能删除对象呢。详细测试程序在附件中。
springside 删除数据库的记录的疑义
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- weixin_42519046 2009-11-05 08:39关注
public void update(Object o){
Session session=this.getSession();
Transaction tx = session.beginTransaction();
session.update(o);
tx.commit();
this.closeSession(session);
}
public void closeSession(){
try
{
if(session!=null){
session.close();
session=null;
}
}catch(Exception ex)
{
ex.printStackTrace();
}
}
你这么写试试Transaction tx = this.getSession().beginTransaction();
this.getSession().delete(entity);
tx.commit();
this.getSession().close();你这个问题,首先this.getSession().beginTransaction(); 和this.getSession().delete(entity); 所获得的 Session对象不是一个对象,执行DELETE方法的那个session没有执行事务,所以运行不成功
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
- ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
- ¥15 乘性高斯噪声在深度学习网络中的应用
- ¥15 运筹学排序问题中的在线排序
- ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
- ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
- ¥15 C++ 头文件/宏冲突问题解决
- ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
- ¥50 安卓adb backup备份子用户应用数据失败
- ¥20 有人能用聚类分析帮我分析一下文本内容嘛