插入400(左右)后,JPA插入失败 - 事务错误

时间:2013-03-19 20:27:14

标签: java hibernate jpa transactions jboss7.x

更新:在一次插入#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:   执行此操作需要事务处理(使用a   事务或扩展持久化上下文)

所以我的问题是两次

1)在整个过程中途,我的交易究竟发生了什么?可以避免吗?

2)是否有更好的方法来进行像这样的批量插入(请记住,我正在加载一堆Foo,并且需要在持久化之前将其转换为Bar。

我在jBoss 7.1.1.Final AS和hibernate-jpa-2.0-api中运行

0 个答案:

没有答案