事务-关于hibernate的一些疑问

问题描述

关于hibernate的一些疑问

@Override
public void update(T t) {
Session sess = sessionFactory.getCurrentSession();
sess.update(t);

}

这个是我用spring+hibernate反向工程生成的一个DAO的函数,可以看到用了seesion,但是我不理解的是,为什么session在update后没有commit(),和close(),难道Hibernate希望我们在service层进行commit()和close()吗?

————————————————————————————————————————————————————-———

@Override
public void updateProductCount(int userId, int productModelId, int count) {
// TODO Auto-generated method stub
[color=#FF0000]User user = userDao.findByProperty("userId", userId);[/color]
[color=#FF0000]Cart cart = cartDao.findByProperty(CartDao.USER_ID, userId);[/color]

    String[] a1 = {CartDao.CART_ID, ProductModelDao.productModelId};
    Integer[] a2 = {cart.getCartId(),productModelId};

    [color=#FF0000]CartItem cartItem = cartItemDao.findListByProperties(a1,a2).get(0);[/color]
    cartItem.setCount(count);

    cartItemDao.update(cartItem);
}

红色部分是3次查询,从代码来看是进行了3次getCurrentSession(),假设每一次的查询后seesion被自动关闭,这也就意味着seesion被反复打开关闭了3次吗?
如果我给这个函数加上一个事务@Transactional,那么是不是意味这一个事务跨了3连接,但是JDBC为底层的HIbernate不是不允许跨连接调用的吗?
我有打算过看源码,但是找不到。。。所以向大家求救

————————————————————————————————————————————————————————

关于事务的属性是不是一般加给service层,因为DAO层都是最基本的操作了(增删查改),事务不是不是就是把一堆基本操作打包好的意思

————————————————————————————————————————————————————————
@Override
public void updateProductCount(int userId, int productModelId, int count) {
// TODO Auto-generated method stub
[color=#FF0000]User user = userDao.findByProperty("userId", userId);[/color]
[color=#FF0000]Cart cart = cartDao.findByProperty(CartDao.USER_ID, userId);[/color]

    String[] a1 = {CartDao.CART_ID, ProductModelDao.productModelId};
    Integer[] a2 = {cart.getCartId(),productModelId};

    [color=#FF0000]CartItem cartItem = cartItemDao.findListByProperties(a1,a2).get(0);[/color]
    cartItem.setCount(count);

    cartItemDao.update(cartItem);
}

就这个函数而言,我如果加了那个openSessionInView的过滤器,是不是指在这个函数从开始调用到完成,session会一直保持打开状态,也就不会出现因为延迟加载访问不到对象的集合属性了啊?这样比seesion反复打开关闭的性能提升大不大啊

解决方案

Hibernate中 session.delete()疑问?

时间: 2025-01-21 03:11:57

事务-关于hibernate的一些疑问的相关文章

建表-各位大神,小弟关于hibernate有一些疑问

问题描述 各位大神,小弟关于hibernate有一些疑问 我是实体类继承建立数据库表的问题 我先建立了一个 @MappedSuperclass public abstract class AbEntity { @Id @GeneratedValue private Integer id; } 然后建立了User类 继承它 @Entity @Table(name="user") @Inheritance(strategy=InheritanceType.JOINED) public cl

spring-关于Spring的事务传播性的一个疑问

问题描述 关于Spring的事务传播性的一个疑问 大家好,问个关于事务的传播性的问题.假设 ServiceA.methodB 设置了 PROPAGATION_REQUIRED,但 ServiceC.methodD 没有设置 事务的传播性,那么当 ServiceA.methodB 调用 ServiceC.methodD 时,methodD 对数据库操作如 insert或update 会随着 ServiceA.methodB 一起提交吗? 解决方案 没有的话就没有,不会使用当前已有的事物,,所以不会

Spring的事务和Hibernate的事务有什么区别

问题描述 想了解一下Spring的事务和Hibernate的事务有什么区别?Hibernate的crud都用到了Transaction,在方法开始时,打开事务,然后结束时提交事务,当Hb与Sp协作时,对于一个运行在服务层且在spring事务中的方法A,调用了运行在Dao层的方法B和C,B,C的操作是通过hb实现的,我就是想不通如下两点:1A方法调用B后,Hb事务不是提交了吗,也就是事务上下文在这里就中断了,如果再调用C,怎么能保证b和c在一个事务环境中呢?2我知道hb的事务控制是通过jdbc的,

事务管理-hibernate和mybatis事务问题

问题描述 hibernate和mybatis事务问题 我想在web应用中使用hibernate和mybatis配合做数据持久化,但是遇到数据源和 事务的问题.首先hibernate是使用的proxool连接池,在自己写的hibernate工具 类中加载hibernate的sessionFactory以及session的打开和事务管理等.那么问题 来了,我在mybatis中该如何配置来使用连接池,以及和hibernate使用同一个事务. 请大神支招. 解决方案 spring集成mybatis事务问

分布式事务系列(1.1)Spring事务管理器PlatformTransactionManager

1 系列目录 分布式事务系列(开篇)提出疑问和研究过程 分布式事务系列(1.1)Spring事务管理器PlatformTransactionManager源码分析 分布式事务系列(1.2)Spring事务体系 分布式事务系列(2.1)分布式事务模型与接口定义 分布式事务系列(3.1)jotm的分布式案例 分布式事务系列(3.2)jotm分布式事务源码分析 分布式事务系列(4.1)Atomikos的分布式案例 2 jdbc事务 2.1 例子 public void save(User user)

JSF+Spring+Hibernate的实例讲解

js 使用JavaServer Faces(JSF).Spring Framework和Hibernate建立一个真实的Web应用程序内容概要使用JSF建立一个真实的Web应用程序不是没有意义的任务,这篇文章介绍了如何将JSF与Sping Framework和Hibernate集成,并且给出了使用这些技术建立这个真实的Web应用程序的最佳实践和设计指导 JavaServer Faces(JSF)技术是J2EE应用程序的一个新的用户接口框架,它非常适合基于MVC(Model-View-Contro

第十三章 事务并发处理

         Hibernate是JDBC的轻量级封装,本身并不具备事务管理能力,在事务管理层,Hibernate将其委托给底层的JDBC或者JTA,以实现事务的管理和调度.          Hibernate的默认事务处理机制基于JDBCTransaction,也可以通过配置文件设定采用JTA作为事务管理实现. 14.1基于JDBC的事务管理            这里要注意的是,在sessionFactory.openSession()中,Hibernate会初始化数据库连接,与此同时

jta-多数据源配置与JTA事务问题

问题描述 多数据源配置与JTA事务问题 项目中使用两个dataSourc,两个sessionFactory.由于业务变化,需要在项目中切换数据源,单独配置多数据源以及单独配置JTA都能成功,将多数据与JTA整合之后,项目启动总是抛出异常. 异常如下: org.springframework.transaction.IllegalTransactionStateException: Pre-bound JDBC Connection found! HibernateTransactionManag

初学hibernate框架

今天初次学习了hibernate,学习了hibernate的一些原理性知识.hibernate是基于ORM的持久层框架,它对JDBC进 行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库.ORM(Object Relation Map)即对象关系映射,其映射方式有两种:①注解映射,②xml配置文件映射,其中第一种方式比较简单,但是耦合对要高,第二种方式虽然要复杂一点但是 耦合度相对低了很多,因为我们开发系统都追求高内聚.低耦合,所以第二种方式较常用. 使用hi