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里,但是在同一个事务内就是查询不到,为什么呢?

connection.autocommit配置为true

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

事务的提交吧!tx.commit;

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

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