如题,我在DAO 中加了事物, 我执行查询语句,未commit 会有其他隐患问题吗?

解决方案 »

  1.   

    由于之前的select的代码加了事物,但是没有提交,这有隐患吗?会不会连接数据库的连接不会释放之类的问题
      

  2.   

    查询是不需要commit,你没明白我的意思
      

  3.   

    commit应该不会牵涉到数据库连接关不关闭等的额外问题,料仅仅只是做了将数据的修改永久提交至数据库。
      

  4.   

    也就是说我查询的时候有 org.hibernate.Transaction tx = session.beginTransaction(); 但是不去commit他,和数据库session连接是没有关系的?(包括连接的释放等)
      

  5.   

    因为连接的管理不应该由事务直接来控制,一个DataSource下可以有多个Transaction,一个Transaction完成后如果默认就关闭了连接,那其它Transaction还要重新打开连接?太低效了。从设计的角度讲,连接由DataSourceManager自己来管理更好,当然不排除它会选择这样一种策略的可能性:事务提交后关闭连接,但这个更会是一种特殊情况。
      

  6.   

    总的来说,就是要看session管理是如何配置的如果使用的是transaction scoped session那么提交事务就会导致关闭session
    <session-factory> 
    <!-- Database connection settings --> 
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
    <property name="connection.url">jdbcracle:thin:scott/tiger@(description=(address_list=(address=(protocol=tcp)(host=host1)(port=1521)))(source_route=yes)(connect_data=(sid=Ora9i)(SERVICE_NAME = Ora9i)) )</property> 
    <property name="connection.username">scott</property> 
    <property name="connection.password">tiger</property> 
    <!-- JDBC connection pool (use the built-in) --> 
    <property name="connection.pool_size">1</property> 
    <!-- SQL dialect --> 
    <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> 
    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</property> 
    <!-- Disable the second-level cache --> 
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">true</property> 
    <property name="hbm2ddl.auto">create</property> 
    <!-- Drop and re-create the database schema on startup --> 
    <property name="hibernate.default_schema">scott</property> 
    <mapping resource="Emp.hbm.xml"/> <!--mapping resource="test100.hbm.xml"--> </session-factory> 其中<property name="current_session_context_class">thread</property> 
    hibernate session与当前线程绑定,当事务提交后,session也被关闭。