更新:1回の挿入#412がデータベースレベルで非ヌル制約に失敗した後、失敗しているようです。トランザクションはおそらくロールバックしています。この設定では、新しいトランザクションを確立することは可能ですか?
Oracleデータベースに多くの行を挿入しようとしていますが、JPAは約400回目の挿入まで正常に機能します。挿入する行は数千行になると思います。
これが私の疑似コード(わかりやすくするために短縮されています)とpersistence.xmlです:
@Stateless
public class LocalContentService
{
@Inject EntityManager em;
public void mySavingMethod(){
for(Foo foo : fooDao.fetchAllFoos()){
Bar bar = new Bar(foo);
em.persist(bar);
em.flush();
em.clear();
log.debug("Saved content for: " + bar.getId());
}
}
<persistence-unit name="databaseTest" >
<jta-data-source>java:/jdbc/testDS</jta-data-source>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<class>org.myorg.Bar</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="false" />
<property name="hibernate.use_sql_comments" value="true" />
</properties>
</persistence-unit>
約400行後、このエラーメッセージが表示され、後続のすべての挿入が失敗します。
エラー[stderr](http--127.0.0.1-8080-1)javax.persistence.TransactionRequiredException:JBAS011469:この操作を実行するにはトランザクションが必要です(トランザクションまたは拡張永続コンテキストを使用)
だから私の質問は2つあります
1)プロセスの途中で私のトランザクションは一体何が起こったのですか?避けることはできますか?
2)このような一括挿入を行うためのより良いアプローチはありますか(私はたくさんのFooをロードしているので、永続化する前にそれらをBarに変換する必要があることに注意してください。
jBoss7.1.1.FinalASおよびhibernate-jpa-2.0-api内で実行しています