Java 事务回滚?

Java 事务回滚?,java,database,jpa,ejb,Java,Database,Jpa,Ejb,我在使用persist()方法将实体插入db时遇到此回滚异常……此异常背后的原因是什么?请检查您是否正确设置了所有双向关系(在com.model.Product实体和与之相关的其他实体之间) 例如,如果从产品到制造商之间存在多-1关系,则会出现如下情况: Caused by: javax.transaction.RollbackException: Transaction marked for rollback. at com.sun.enterprise.transaction.JavaEET

我在使用
persist()
方法将实体插入db时遇到此回滚异常……此异常背后的原因是什么?

请检查您是否正确设置了所有双向关系(在
com.model.Product
实体和与之相关的其他实体之间)

例如,如果从
产品
制造商
之间存在多-1关系,则会出现如下情况:

Caused by: javax.transaction.RollbackException: Transaction marked for rollback.
at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:473)
at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:852)
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5114)
... 63 more
Caused by: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: com.model.Product[ id=1 ].
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.discoverUnregisteredNewObjects(RepeatableWriteUnitOfWork.java:302)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:695)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1482)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.issueSQLbeforeCompletion(UnitOfWorkImpl.java:3135)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.issueSQLbeforeCompletion(RepeatableWriteUnitOfWork.java:344)
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:157)
at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:68)
at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:435)
... 65 more
产品产品=新产品();
产品代码setId(1);
制造商=新制造商();
制造商setId(123);
产品。设置制造商(制造商);//设置关系的多个1面
Set products=new HashSet();
产品。添加(产品);
制造商。设置产品(产品);//设置关系的1个多方面

检查您是否正确设置了所有双向关系(在您的
com.model.Product
实体和与其相关的其他实体之间)

例如,如果从
产品
制造商
之间存在多-1关系,则会出现如下情况:

Caused by: javax.transaction.RollbackException: Transaction marked for rollback.
at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:473)
at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:852)
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5114)
... 63 more
Caused by: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: com.model.Product[ id=1 ].
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.discoverUnregisteredNewObjects(RepeatableWriteUnitOfWork.java:302)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:695)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1482)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.issueSQLbeforeCompletion(UnitOfWorkImpl.java:3135)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.issueSQLbeforeCompletion(RepeatableWriteUnitOfWork.java:344)
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:157)
at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:68)
at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:435)
... 65 more
产品产品=新产品();
产品代码setId(1);
制造商=新制造商();
制造商setId(123);
产品。设置制造商(制造商);//设置关系的多个1面
Set products=new HashSet();
产品。添加(产品);
制造商。设置产品(产品);//设置关系的1个多方面

在插入check you
hbm
文件之前,可能存在一些级联问题(
设置cascade=all
)。

在插入check you
hbm
文件之前,可能存在一些级联问题(
设置cascade=all