0

データソースを使用してOracleデータベースに接続し、データを挿入しています。以下は私の休止状態の設定エントリです:


<hibernate-configuration>
    <session-factory>
        <property name="connection.datasource">jdbc/LOCAL_ORACLE</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>   
    </session-factory>
</hibernate-configuration>

以下は、データを保存するコードスニペットです。



final Configuration cfg = new Configuration().addResource("SampleTable.hbm.xml").configure();
final ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
sessionFactory = cfg.buildSessionFactory(serviceRegistry);
session = sessionFactory.openSession();
txn = session.beginTransaction();
session.save(cs90spTransDetails);
txn.commit(); 

私が直面している問題は、txn.commit()が休止状態と呼ばれるときに以下のエラーをスローすることです。


[4/24/12 19:25:13:675 IST] 0000001a SystemErr     R Caused by: org.hibernate.TransactionException: unable to commit against JDBC connection
[4/24/12 19:25:13:675 IST] 0000001a SystemErr     R     at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:116)
[4/24/12 19:25:13:675 IST] 0000001a SystemErr     R     at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:178)
[4/24/12 19:25:13:675 IST] 0000001a SystemErr     R     ... 13 more
[4/24/12 19:25:13:675 IST] 0000001a SystemErr     R Caused by: java.sql.SQLException: DSRA9350E: Operation Connection.commit is not allowed during a global transaction.
[4/24/12 19:25:13:675 IST] 0000001a SystemErr     R     at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.commit(WSJdbcConnection.java:1064)
[4/24/12 19:25:13:675 IST] 0000001a SystemErr     R     at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:112)

注:上記のコードは、hibernate.connection.driver_classとhibernate.connection.urlを使用してデータベースに接続する場合に正常に機能します。データは問題なくデータベースに保存されます。

私は何か間違ったことをしていると確信していますが、それは理解できません。誰かが私が欠けているものを教えてもらえますか?

ありがとうございました。ジェイチャンドラン。

4

1 に答える 1

1

私が見る限り、アプリケーションサーバーから取得したデータソースは、コンテナ管理のトランザクションに参加するように構成されています。

したがって、これらのトランザクションを使用するようにHibernateを構成する必要があり(3.9.1。トランザクション戦略の構成および3.9.3。JTAを使用した現在のセッションコンテキスト管理を参照)、トランザクションを手動で管理する必要はありません。

于 2012-04-24T14:39:36.150 に答える