Java JPA插入在400次(约)插入后失败-事务错误

Java JPA插入在400次(约)插入后失败-事务错误,java,hibernate,jpa,transactions,jboss7.x,Java,Hibernate,Jpa,Transactions,Jboss7.x,更新:在一次插入#412使数据库级别的NOTNULL约束失败之后,它似乎失败了。交易很可能正在回滚。在这种设置下,是否可以建立新的事务 我正在尝试向我的oracle数据库中插入大量行,JPA在第400次插入之前工作正常。我希望有几千行要插入 以下是我的psuedo代码(为了清晰起见缩短了代码)&persistence.xml: @Stateless public class LocalContentService { @Inject EntityManager em; publ

更新:在一次插入#412使数据库级别的NOTNULL约束失败之后,它似乎失败了。交易很可能正在回滚。在这种设置下,是否可以建立新的事务

我正在尝试向我的oracle数据库中插入大量行,JPA在第400次插入之前工作正常。我希望有几千行要插入

以下是我的psuedo代码(为了清晰起见缩短了代码)&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>
@无状态
公共类LocalContentService
{
@注入EntityManager em;
public void mySavingMethod(){
for(Foo-Foo:fooDao.fetchAllFoos()){
棒棒=新棒(foo);
em.bar;
em.flush();
em.clear();
log.debug(“为:+bar.getId()保存的内容”);
}
}
java:/jdbc/testDS
真的
org.myorg.Bar
在大约400行之后,我收到此错误消息,所有后续插入都失败:

错误[stderr](http--127.0.0.1-8080-1) javax.persistence.TransactionRequiredException:JBAS011469: 执行此操作需要事务(使用 事务或扩展持久性上下文)

所以我的问题是双重的

1) 在交易过程的中途,我的交易到底发生了什么?可以避免吗

2) 有没有更好的方法来执行像这样的批量插入(请记住,我正在加载一堆Foo,它们需要在持久化之前转换为Bar)


我在jBoss 7.1.1.Final AS和hibernate-jpa-2.0-api中运行,为什么每次事务都刷新和清除实体管理器。这会强制与数据库同步。不是说这就是事务失败的原因,但这会使方法非常慢。这是很好的反馈…我会进行此更新。就像你说的,我不确定e它将解决问题。如果是使事务回滚的非null约束,请修复错误:确保不要将null插入此列,或者,如果可以接受null值,则删除非null约束。在我看来,部分错误是没有报告约束冲突,这将是异常处理中的一个严重缺陷这使得调试变得不必要的困难。不管这种特定的约束冲突如何,这种糟糕的异常处理是值得改进的。