mking1986
mking1986
2015-11-17 13:27
采纳率: 0%
浏览 4.6k

hibernate4为什么在执行save ()后直接查询直接查询不到数据?

图片说明hibernate4为什么在执行save ()后直接查询直接查询不到数据
同样的配置在hibernate3这样是能查询到数据的,换到hibernate4就是查不到,
就像save()操作没有把对象缓存一样,这样是为什么呀?下面是配置

    <property name="dialect">
        org.hibernate.dialect.MySQL5InnoDBDialect
    </property>
    <property name="current_session_context_class">jta</property>
    <property name="hibernate.transaction.factory_class">
        org.hibernate.transaction.JTATransactionFactory
    </property>
    <property name="hibernate.transaction.manager_lookup_class">
        com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup
    </property>
    <property name="connection.release_mode">auto</property>
    <property name="hibernate.transaction.flush_before_completion">
        true
    </property>
    <property name="hibernate.transaction.auto_close_session">
        true
    </property>

    事务用的JTA
    java代码时在同一个事务里添加和查询的:

    User user = new User()
    user.setOid("123");
    ...
    Dao.save(user);

    list lst = Dao.query("User","where oid='123'");

    结果lst为空

    理论上save后对象应该缓存在Session里的吧,查询的话也应该查询到缓存里对象吧,可是为什么查询不到呢?

    经过验证,对象确实在session里,但是在同一个事务内就是查询不到,为什么呢?
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • qq_25280443
    無規則 2015-11-17 14:17

    connection.autocommit配置为true

    点赞 评论
  • wojiushiwo945you
    毕小宝 2015-11-17 14:29

    比对下你的hibernate3和hibernate4的配置有什么区别没?
    应该是save()操作后并没有立刻提交到数据库,Hibernian默认的是手动提交,所以需要设置自动提交,或者在代码中开启事务手动提交。

    点赞 评论
  • appleliuliping
    无忧忧啊 2015-11-18 05:38

    事务的提交吧!tx.commit;

    点赞 评论
  • mking1986
    mking1986 2015-11-18 07:05

    我用的是JTA事务。现在问题出在事务内,在一个事务内save()接着查询应该能查询到才对吧!

    点赞 评论
  • MonkeyBrothers
    小猴子的技术笔记 2017-11-18 07:06

    你可以设置显示SQL语句自动提交SQL

    点赞 评论

相关推荐