为什么我得到javax.ejb.EJBTransactionRolledbackException? - setRollbackOnly

 温倩0918 发布于 2023-02-13 17:26

在我的Web应用程序中,我在Apache Tomcat(TomEE)/7.0.37服务器上使用OpenJPA.

我的实体User.class:

@Entity
@Table(name = "USER")
public class User implements Serializable {
  private static final long serialVersionUID = 1L;
  @Id
  @GeneratedValue
  @Basic(optional = false)
  @Column(name = "id_user")
  private Integer idUser;
  @Size(max = 8)
  @Column(name = "login")
  private String login;
  @Size(max = 128)
  @Column(name = "password")
  private String password;
  @OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
  private Lecturer lecturer;
  @OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
  private Student student;
  @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
  private List userHasRolesList;

  //constructors, getters, setters
}

当我创建新用户时:

    public void addUser(String log, String pass) {     
        User user = new User(); //utworzenie u?ytkownika i dodanie do bazy 
        user.setLogin(log);
        user.setPassword(pass);
        em.persist(user);
    }

我得到例外:

javax.el.ELException: javax.ejb.EJBTransactionRolledbackException: Transaction was rolled back, presumably because setRollbackOnly was called during a synchronization

Caused by:
org.apache.geronimo.transaction.manager.SetRollbackOnlyException - setRollbackOnly() called. See stacktrace for origin
at org.apache.geronimo.transaction.manager.TransactionImpl.setRollbackOnly(TransactionImpl.java:126)

我尝试改变生成ID策略,但它没有帮助.怎么了?


我的应用程序堆栈跟踪:

org.apache.myfaces.view.facelets.el.ContextAwareELException: javax.el.ELException: javax.ejb.EJBTransactionRolledbackException: Transaction was rolled back, presumably because setRollbackOnly was called during a synchronization
at org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:108)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:68)
at javax.faces.component.UICommand.broadcast(UICommand.java:120)
at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1028)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:286)
at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1375)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:38)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at filters.NoCacheFilter.doFilter(NoCacheFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

Caused by: javax.el.ELException: javax.ejb.EJBTransactionRolledbackException: Transaction was rolled back, presumably because setRollbackOnly was called during a synchronization
at org.apache.el.parser.AstValue.invoke(AstValue.java:291)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96)
... 30 more

Caused by: javax.ejb.EJBTransactionRolledbackException: Transaction was rolled back, presumably because setRollbackOnly was called during a synchronization
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:345)
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:283)
at model.logic.UserService$LocalBeanProxy.addUser(model/logic/UserService.java)
at model.backingbeans.RegisterBacking.register(RegisterBacking.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
... 32 more

Caused by: javax.transaction.RollbackException: Unable to commit: transaction marked for rollback
at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:272)
at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:252)
at org.apache.openejb.core.transaction.JtaTransactionPolicy.completeTransaction(JtaTransactionPolicy.java:328)
at org.apache.openejb.core.transaction.TxRequired.commit(TxRequired.java:75)
at org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke(EjbTransactionUtil.java:76)
at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:259)
at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:191)
at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:246)
at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:241)
at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:83)
at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:279)
... 39 more

Caused by: org.apache.geronimo.transaction.manager.SetRollbackOnlyException: setRollbackOnly() called.  See stacktrace for origin
at org.apache.geronimo.transaction.manager.TransactionImpl.setRollbackOnly(TransactionImpl.java:126)
at org.apache.geronimo.transaction.manager.TransactionManagerImpl.setRollbackOnly(TransactionManagerImpl.java:243)
at org.apache.openejb.core.TransactionSynchronizationRegistryWrapper.setRollbackOnly(TransactionSynchronizationRegistryWrapper.java:71)
at org.apache.openjpa.ee.RegistryManagedRuntime$TransactionManagerRegistryFacade.setRollbackOnly(RegistryManagedRuntime.java:128)
at org.apache.openjpa.ee.RegistryManagedRuntime.setRollbackOnly(RegistryManagedRuntime.java:74)
at org.apache.openjpa.ee.AutomaticManagedRuntime.setRollbackOnly(AutomaticManagedRuntime.java:274)
at org.apache.openjpa.kernel.BrokerImpl.setRollbackOnlyInternal(BrokerImpl.java:1660)
at org.apache.openjpa.kernel.BrokerImpl.setRollbackOnly(BrokerImpl.java:1640)
at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1847)
at org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:616)
at org.apache.openjpa.kernel.StateManagerImpl.assignField(StateManagerImpl.java:703)
at org.apache.openjpa.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1615)
at org.apache.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:1598)
at model.entity.User.pcGetidUser(User.java)
at model.entity.User.toString(User.java:137)
at java.text.MessageFormat.subformat(MessageFormat.java:1271)
at java.text.MessageFormat.format(MessageFormat.java:860)
at java.text.Format.format(Format.java:157)
at java.text.MessageFormat.format(MessageFormat.java:836)
at org.apache.openjpa.lib.util.Localizer$Message.getMessage(Localizer.java:282)
at org.apache.openjpa.util.OpenJPAException.(OpenJPAException.java:64)
at org.apache.openjpa.util.UserException.(UserException.java:47)
at org.apache.openjpa.util.InvalidStateException.(InvalidStateException.java:34)
at org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:567)
at org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:505)
at org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2982)
at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:40)
at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:1054)
at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2112)
at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2072)
at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1990)
at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:527)
at org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:512)
at org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:413)
at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:262)
... 49 more

kuba44.. 15

好的,我发现我的错:

我得到了这个例外,因为我在数据库中有64个字符的密码字段(CHAR(64)),我试着在那里写128个字符串.更改数据库中的表解决了我的问题.

因此,当您收到此异常时,请检查您的@Entity类是否具有与数据库表中的类型相同的字段(具有相同类型).

谢谢大家的帮助.我很抱歉遇到了麻烦和困惑.

1 个回答
  • 好的,我发现我的错:

    我得到了这个例外,因为我在数据库中有64个字符的密码字段(CHAR(64)),我试着在那里写128个字符串.更改数据库中的表解决了我的问题.

    因此,当您收到此异常时,请检查您的@Entity类是否具有与数据库表中的类型相同的字段(具有相同类型).

    谢谢大家的帮助.我很抱歉遇到了麻烦和困惑.

    2023-02-13 17:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有