- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Hibernate 4.2.21在 websphere 8.5.5.4 上运行 Java 6
数据库:Microsoft SQL Server 2012
有时,当我尝试使用以下代码更新实体时:
this.transaction.begin();
// lots of lines of code here before the merge
merge(carentrypermitrequest);
this.transaction.commit(); // exception here
我得到以下异常:
javax.transaction.RollbackException
at com.ibm.tx.jta.impl.TransactionImpl.stage3CommitProcessing(TransactionImpl.java:1268)
at com.ibm.tx.jta.impl.TransactionImpl.processCommit(TransactionImpl.java:1042)
at com.ibm.tx.jta.impl.TransactionImpl.commit(TransactionImpl.java:963)
at com.ibm.ws.tx.jta.TranManagerImpl.commit(TranManagerImpl.java:439)
at com.ibm.tx.jta.impl.TranManagerSet.commit(TranManagerSet.java:191)
at com.ibm.ws.tx.jta.UserTransactionImpl.commit(UserTransactionImpl.java:302)
at com.dataserve.mci.bean.license.CarEntryPermitRequestBean.completeAction(CarEntryPermitRequestBean.java:1525)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:328)
at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:341)
at org.jboss.el.parser.AstPropertySuffix.invoke(AstPropertySuffix.java:58)
at org.jboss.el.parser.AstValue.invoke(AstValue.java:96)
at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(Unknown Source)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(Unknown Source)
at com.sun.faces.application.ActionListenerImpl.processAction(Unknown Source)
at org.primefaces.application.DialogActionListener.processAction(DialogActionListener.java:45)
at javax.faces.component.UICommand.broadcast(Unknown Source)
at javax.faces.component.UIViewRoot.broadcastEvents(Unknown Source)
at javax.faces.component.UIViewRoot.processApplication(Unknown Source)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(Unknown Source)
at com.sun.faces.lifecycle.Phase.doPhase(Unknown Source)
at com.sun.faces.lifecycle.LifecycleImpl.execute(Unknown Source)
at javax.faces.webapp.FacesServlet.service(Unknown Source)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:100)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
at com.filenet.ae.toolkit.server.servlet.filter.PostprocessorFilter.doFilter(PostprocessorFilter.java:38)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
at com.filenet.ae.toolkit.server.servlet.filter.ContainerBasedFilter.doFilter(ContainerBasedFilter.java:218)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
at com.filenet.ae.toolkit.server.servlet.filter.PreprocessorFilter.doFilter(PreprocessorFilter.java:91)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
at com.filenet.ae.toolkit.server.servlet.filter.SecurityPluginFilter.doFilter(SecurityPluginFilter.java:202)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
at com.filenet.ae.toolkit.server.servlet.filter.ThreadLocalCleanupFilter.doFilter(ThreadLocalCleanupFilter.java:50)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
at com.dataserve.common.CompatibleFilter.doFilter(CompatibleFilter.java:53)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:964)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1104)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3901)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:981)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:287)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1865)
这就是我获取 session 工厂的方式:
protected SessionFactory getSessionFactory() {
try {
return (SessionFactory) new InitialContext().lookup("SessionFactory");
} catch (Exception e) {
log.error("Could not locate SessionFactory in JNDI", e);
throw new IllegalStateException("Could not locate SessionFactory in JNDI");
}
}
这是我获得交易的方式:
public final UserTransaction transaction = getUserTransaction();
protected UserTransaction getUserTransaction() {
try {
return (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
} catch (NamingException e) {
e.printStackTrace();
System.err.println("Could not locate UserTransaction in JNDI" + e.getMessage());
throw new IllegalStateException("Could not locate UserTransaction in JNDI");
}
}
合并方法如下:
public CarEntryPermitRequest merge(CarEntryPermitRequest detachedInstance) {
try {
CarEntryPermitRequest result = (CarEntryPermitRequest) sessionFactory.getCurrentSession()
.merge(detachedInstance);
return result;
} catch (RuntimeException re) {
throw re;
}
}
和 completeAction()
方法:
public void completeAction() {
try {
Map fields = new HashMap();
RequestContext requestContext = RequestContext.getCurrentInstance();
RequestContext.getCurrentInstance().addCallbackParam("isValid", Boolean.valueOf(true));
this.transaction.begin();
if (stepNumber == null) {
if (numberOfUploadedFiles < 2) {
addErrorMessage("error1", null, true);
return;
}
requestContext.addCallbackParam("step", new Integer(1));
requestContext.addCallbackParam("isValid2", true);
if (carentrypermitrequest == null)
carentrypermitrequest = new CarEntryPermitRequest();
carentrypermitrequest.setRequesterUserName(loggedInUserId);
carentrypermitrequest.setRequesterName(empName);
carentrypermitrequest.setRequesterDepartmentName(empDept);
carentrypermitrequest.setRequesterMobile(empMobile);
carentrypermitrequest.setRequesterEmail(empEmail);
carentrypermitrequest.setRequestDate(new Date());
carentrypermitrequest.setRequestStatus(CarEntryPermitRequestStatusEnum.PENDING.getValue());
if (destination == null) {
addErrorMessage("error2", null, true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
requestContext.addCallbackParam("isValid2", false);
this.transaction.commit();
return;
}
if (empName == null || empName.equals("")) {
addErrorMessage("error3", null, true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
requestContext.addCallbackParam("isValid2", false);
this.transaction.commit();
return;
}
if (empMobile == null || empMobile.equals("")) {
addErrorMessage("error4", null, true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
requestContext.addCallbackParam("isValid2", false);
this.transaction.commit();
return;
}
if (empBuild.equals("error5")) {
addErrorMessage("error6", null, true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
requestContext.addCallbackParam("isValid2", false);
this.transaction.commit();
return;
}
try {
if (carcategoryvalue == -1 || carcategoryvalue == null || cartypevalue == null
|| cartypevalue == 0) {
addErrorMessage("error7", null,
true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
requestContext.addCallbackParam("isValid2", false);
this.transaction.commit();
return;
}
} catch (Exception e) {
AppLogger.Log(e);
addErrorMessage("error8", null, true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
this.transaction.commit();
return;
}
if (plateNumerSplited[0].trim().equals("") || plateNumerSplited[1].trim().equals("")) {
addErrorMessage("error9", null, true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
requestContext.addCallbackParam("isValid2", false);
this.transaction.commit();
return;
}
platenumber = getPlateString(plateNumerSplited);
if (carentrypermitrequesthome.isPlateHasPendingRequest(platenumber)) {
addErrorMessage("error10", null,
true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
requestContext.addCallbackParam("isValid2", false);
this.transaction.commit();
return;
}
if (destination.equals(DESTINATION_EMPLOYEE)) {
IoEmployees employee = ioemployeeHome.findByUserId(loggedInUserId);
if (employee != null) {
if (employee.getEmpMobile() == null || employee.getEmpMobile().trim().length() == 0) {
employee.setEmpMobile(empMobile);
ioemployeeHome.merge(employee);
}
carentrypermitrequest.setEmployee(employee);
}
carentrypermitrequest.setPlatenumber(platenumber);
if (StringUtils.isNotBlank(employeeNumber))
carentrypermitrequest.setEmployeeNumber(Integer.parseInt(employeeNumber.trim()));
if (StringUtils.isNotBlank(empExt))
carentrypermitrequest.setExt(Integer.parseInt(empExt.trim()));
CarType cartypeobj = cartypehome.findById(cartypevalue);
carentrypermitrequest.setCartypeId(cartypeobj);
carentrypermitrequest.setPermissioncase("under process");
CarCategory carcategoryobj = carcategoryehome.findById(carcategoryvalue);
carentrypermitrequest.setCarcategoryId(carcategoryobj);
CarColor carcolorobj = carcolorhome.findById(carcolorvalue);
carentrypermitrequest.setCarcolorId(carcolorobj);
carentrypermitrequest.setCarmodel(model);
carentrypermitrequest.setNotes(notes);
permitRequestDate = permitRequestDate.replace("/", "");
carentrypermitrequest.setPermitRequestDate(new Integer(permitRequestDate));
carentrypermitrequest.setEmpbuilding(empBuild);
carentrypermitrequesthome.attachDirty(carentrypermitrequest);
this.transaction.commit();
requestId = carentrypermitrequest.getCarentrypermitrequestId();
String subject = "aaaaaaaa " + empName + " - bbbbbbbb : " + empMobile;
fields.put("F_Subject", subject);
fields.put("processType", PageCodeBase.PROCCESS_TYPES.CARENTRY.getCode());
fields.put("processID", carentrypermitrequest.getCarentrypermitrequestId());
fields.put("sendto", DESTINATION_EMPLOYEE);
fields.put("carentrypermitrequestID", carentrypermitrequest.getCarentrypermitrequestId());
fields.put("Building", empBuild.equals("المبنى الرئيسي") ? 1 : 2);
empMobileDisable = true;
}
if (destination.equals(DESTINATION_NOT_EMPLOYEE)) {
if (empDept == null || empDept.equals("")) {
addErrorMessage("aaaaaaaaaaa", null, true);
requestContext.addCallbackParam("isValid2", false);
this.transaction.commit();
return;
}
if (empNumber == null || empNumber.equals("")) {
addErrorMessage("vvvvvvvvvv ", null, true);
requestContext.addCallbackParam("isValid2", false);
this.transaction.commit();
return;
}
IoDepartments deptid = new IoDepartmentsHome().findByName(empDept);
carentrypermitrequest.setEmpdeptoutministry(deptid);
carentrypermitrequest.setEmpnameoutministry(empName);
carentrypermitrequest.setEmpnumoutministry(empNumber);
carentrypermitrequest.setEmpmobileoutministry(empMobile);
carentrypermitrequest.setEmpemailoutministry(empEmail);
carentrypermitrequest.setPlatenumber(platenumber);
CarType cartypeobj = cartypehome.findById(cartypevalue);
carentrypermitrequest.setCartypeId(cartypeobj);
carentrypermitrequest.setPermissioncase("تحت الأجراء");
CarCategory carcategoryobj = carcategoryehome.findById(carcategoryvalue);
carentrypermitrequest.setCarcategoryId(carcategoryobj);
CarColor carcolorobj = carcolorhome.findById(carcolorvalue);
carentrypermitrequest.setCarcolorId(carcolorobj);
carentrypermitrequest.setCarmodel(model);
carentrypermitrequest.setNotes(notes);
permitRequestDate = permitRequestDate.replace("/", "");
carentrypermitrequest.setPermitRequestDate(new Integer(permitRequestDate));
carentrypermitrequest.setEmpbuilding(empBuild);
carentrypermitrequesthome.attachDirty(carentrypermitrequest);
this.transaction.commit();
requestId = carentrypermitrequest.getCarentrypermitrequestId();
String subject = "gggggggggg " + empName + " - tttttttttt: " + empMobile;
fields.put("F_Subject", subject);
fields.put("processType", PageCodeBase.PROCCESS_TYPES.CARENTRY.getCode());
fields.put("processID", carentrypermitrequest.getCarentrypermitrequestId());
fields.put("sendto", DESTINATION_NOT_EMPLOYEE);
fields.put("carentrypermitrequestID", carentrypermitrequest.getCarentrypermitrequestId());
fields.put("Building", empBuild.equals("المبنى الرئيسي") ? 1 : 2);
empMobileDisable = true;
}
processHandler.doLaunch(fields);
String queueName = "";
if (empBuild.equals(MAIN_BUILDING_VALUE)) {
queueName = MAIN_BUILDING_QUEUE;
} else if (empBuild.equals(BUSINESS_BUILDING_VALUE)) {
queueName = BUSINESS_BUILDING_QUEUE;
}
List<String> toList = getPublicInboxUsersEmails(queueName);
String mailSubject = "eeeeeeeeeeeee";
String mailBody = createMailBodyForNewRequest();
String imageName = "moamalatIcon.jpg";
String bannerPath = NotificationThread.class.getResource(imageName).getPath();
NotificationThread thread = new NotificationThread(toList, mailSubject, mailBody, configs, bannerPath);
thread.start();
String[] paramsArray = { carentrypermitrequest.getPlatenumber(), requestId.toString(),
GeneralUtils.getConfig("CAR_INQUIRE_URL") };
sendSMSNotificaiton(empMobile, ProcessConstant.SMS_CODE_CAR_PASS_RECEIVED, paramsArray);
}
else if (stepNumber == STEP_NUMBER_EMPLOYEE_ACTION) { // security manager step
requestContext.addCallbackParam("isValid2", true);
Integer carentrypermitrequestID = (Integer) processHandler.getStepElement()
.getParameterValue("carentrypermitrequestID");
if (dManaSecurityApprove == null || dManaSecurityApprove == 0) {
addErrorMessage("yyyyyyyyyy", null, true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
requestContext.addCallbackParam("isValid2", false);
return;
}
if ((permissiondate == null || permissiondate.trim().length() == 0 || permissionenumber == null
|| permissionenumber.trim().length() == 0) && (dManaSecurityApprove == 1)) {
Boolean test = false;
addErrorMessage(" oooooooooooo", null, true);
requestContext.addCallbackParam("isValid", test);
requestContext.addCallbackParam("isValid2", false);
return;
}
carentrypermitrequest.setSecuritymanagernotes(securityManagerNotes);
securityManager = new IoDepartmentsHome()
.findById(Integer.parseInt((configs.getProperty(ProcessConstant.DEP_Security_DEP))))
.getIoEmployeesByManagerid();
carentrypermitrequest.setSecuritymanager(securityManager);
IoEmployees actionEmployee = ioemployeeHome.findByUserId(getUserName());
carentrypermitrequest.setActionEmployee(actionEmployee);
if (dManaSecurityApprove.equals(1)) {
platenumber = getPlateString(plateNumerSplited);
carentrypermitrequest.setPlatenumber(platenumber);
CarType cartypeobj = cartypehome.findById(cartypevalue);
carentrypermitrequest.setCartypeId(cartypeobj);
CarCategory carcategoryobj = carcategoryehome.findById(carcategoryvalue);
carentrypermitrequest.setCarcategoryId(carcategoryobj);
CarColor carcolorobj = carcolorhome.findById(carcolorvalue);
carentrypermitrequest.setCarcolorId(carcolorobj);
carentrypermitrequest.setCarmodel(model);
carentrypermitrequest.setPermissioncase(permissioncase);
permissiondate = permissiondate.replace("/", "");
carentrypermitrequest.setPermissiondate(new Integer(permissiondate));
carentrypermitrequest.setPermissionenumber(new Integer(permissionenumber));
carentrypermitrequest.setVersionnumber(new Integer(versionnumber));
carentrypermitrequest.setLicenseVersion(licenseVersion);
carentrypermitrequest.setAccepted(1);
carentrypermitrequest.setAcceptDate(new Date());
carentrypermitrequest.setAcceptedBy(loggedInUserId);
carentrypermitrequest.setRequestStatus(CarEntryPermitRequestStatusEnum.ACCEPTED.getValue());
if (isexpireDate == true || permissioncase.equals(PERMIT_TYPE_TEMPORARY)) {
if (expireDate == null || expireDate.length() == 0) {
addErrorMessage("mmmmmmmmmmmm", null, true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
return;
}
String expireDatestr = expireDate.replace("/", "");
carentrypermitrequest.setExpiredate(new Integer(expireDatestr));
String hijriYear = expireDate.substring(0, 4);
String hijriMonth = expireDate.substring(5, 7);
String hijriDay = expireDate.substring(8);
String expireDateGreg = convertFromHijriToGreg(hijriYear, hijriMonth, hijriDay);
fields.put("expire", true);
fields.put("expireDate", expireDateGreg);
}
fields.put("decisionManaSecurityNum", 1);
fields.put("carentrypermitrequestID", carentrypermitrequestID);
processHandler.doComplete(fields);
sendSMSNotificaiton(empMobile, ProcessConstant.SMS_CODE_CAR_PASS, new String[] {});
}
if (dManaSecurityApprove.equals(2)) {
if (showSecurityManSec && StringUtils.isBlank(securityManagerNotes)) {
addErrorMessage("qqqqqqqqqq", null, true);
requestContext.addCallbackParam("isValid", Boolean.valueOf(false));
requestContext.addCallbackParam("isValid2", false);
return;
}
carentrypermitrequest.setRejectDate(new Date());
carentrypermitrequest.setRejectedBy(loggedInUserId);
carentrypermitrequest.setRejectReason(securityManagerNotes.trim());
carentrypermitrequest.setRequestStatus(CarEntryPermitRequestStatusEnum.REJECTED.getValue());
fields.put("refusedfrom", 1);
fields.put("decisionManaSecurityNum", 2);
fields.put("carentrypermitrequestID", carentrypermitrequestID);
processHandler.doComplete(fields);
String rejectReason = securityManagerNotes;
if (securityManagerNotes.length() > 20) {
rejectReason = securityManagerNotes.substring(0, 20) + "...";
}
String[] paramsArray = { carentrypermitrequest.getPlatenumber(), rejectReason };
sendSMSNotificaiton(empMobile, ProcessConstant.SMS_CODE_CAR_PASS_REJECTED, paramsArray);
}
if (dManaSecurityApprove.equals(3)) {
if (selectedEmp != null) {
fields.put("SecurityEmp", new String[] { selectedEmp });
}
fields.put("decisionManaSecurityNum", 3);
fields.put("carentrypermitrequestID", carentrypermitrequestID);
processHandler.doComplete(fields);
}
loadCredentials(
(HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest());
// sometimes this throws rollbackexception
carentrypermitrequesthome.merge(carentrypermitrequest);
// carentrypermitrequesthome.attachDirty(carentrypermitrequest);
this.transaction.commit();
}
} catch (Exception e) {
AppLogger.Log("######### EXCEPTION WITH CAR ENTRY REQUEST NUMBER: "
+ carentrypermitrequest.getCarentrypermitrequestId() + " WITH USER: " + loggedInUserId
+ ",stepNumber: " + stepNumber + ",permissionNumber: " + permissionenumber
+ ",getTranscationStatus: " + getTranscationStatus());
AppLogger.Log(e);
RequestContext.getCurrentInstance().addCallbackParam("isValid", Boolean.valueOf(false));
RequestContext.getCurrentInstance().addCallbackParam("error", true);
}
}
我想知道是什么导致了 RollbackException,因为抛出的异常不包含除上述内容之外的任何详细信息。
最佳答案
过去,我一直在为同样的问题而苦苦挣扎:我试图用一些新数据更新一个实体,但一直收到此 RollBackException
而没有任何痕迹。
在对 Hibernate 的源代码进行数小时的调试之后,我发现 另一个完全不同的异常在之前从 Hibernate 的源代码中抛出并被吞没在一个空的 catch
block 中并消失了从任何外部角度来看。这破坏了我用来合并数据的 EntityManager
。
特别是,Hibernate 试图实例化过程中所需的另一个实体,但找不到默认的公共(public)构造函数。
我仍然不知道 Hibernate 的代码如何让代码行包含空的 catch
block 。我使用的版本是 4.3.5.Final
。
我猜你遇到了同样的问题:一些异常,可能与我遇到的异常性质不同(缺少公共(public)默认构造函数),是从 hibernate 层抛出的,在那里被捕获然后没有被管理无论如何。
下载 Hibernate 的源代码并在其中迭代整个过程调用的方法,尤其要留意空的 catch block 。请注意,在我的例子中,空的 catch block 不属于 RollBackException
堆栈跟踪中可见的方法!
这是我当时在 CodeRanch 上创建的讨论我的问题的帖子的链接:
CodeRanch - RollbackException thrown when adding ManyToOne relationship
关于java - 如何找到 javax.transaction.RollbackException 的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52071164/
我不明白注释之间的实际区别是什么javax.transaction.Transactional和org.springframework.transaction.annotation.Transacti
我不明白注释 javax.transaction.Transactional 和 org.springframework.transaction.annotation.Transactional 之间
我正在尝试删除一个节点。 我知道要先删除节点,我必须删除关系。 MATCH (n:`Dummy`) WHERE n.uuid='1aa41234-aaaa-xxxx-ffff-xxxx11xx0x62
假设我有一个共享钱包,可以为我和我的兄弟收集以太币。我们彼此分享这个钱包的 50%。 如果有一笔 ETH 交易进入这个钱包,是否有一种自动方式可以将收到的以太币自动发送到我的个人钱包和我兄弟的钱包,而
我已经阅读并重新阅读了文档 re: mnesia:activity/3、mnesia:activity/4 和 mnesia/transaction/2,但它们对我来说仍然像是一种晦涩难懂的外语。 在
精简版: 在 Firebase 事务(在 Java 中)中,如果我从 MutableData.getValue() 中得到意外的或不一致的(陈旧的)值,我应该如何进行错误检查并确保事务在必要时重复运行
使用 Spring 时@Transcational在服务层,我需要放置 在 xml 文件上。 我想知道 可以javax.jdo.annotations.Transactional像spring一样用在
这是我的情况。 我正在构建一个 RESTful Web 服务,从客户端接收数据,然后根据该数据创建一个事件,然后我想将这个新事件推送到 celery 以异步处理它。 我使用 Pyramid 构建 RE
这是我的情况。 我正在构建一个 RESTful web 服务,它从客户端接收数据,然后从该数据创建一个事件,然后我想将这个新事件推送到 celery 以异步处理它。 我使用 pyramid 构建 RE
当我启动 jetty 时,以下行出现在日志中: :INFO:oejpw.PlusConfiguration:No Transaction manager found - if your webapp
@Transactional(rollbackFor = someException.class) public void methodA() throws someException { t
我花了几个小时试图解决这个问题。谷歌和 Stackoverflow 也没有多大帮助。所以这里非常欢迎任何建议。 我正在尝试在更新两个相关表时对事务应用回滚逻辑: 一般的代码是: // ... $em
我在 Service 类中看到了一个方法,它被标记为 @Transactional,但它还在同一个类中调用了一些其他方法,这些方法没有被标记为 @Transactional。 这是否意味着对单独方法的
我目前正在使用 Microsoft Enterprise Library 5.0,我想知道下面的代码是否是处理事务的可接受方式。 我已经稍微简化了场景,但本质是我想在同一个事务中在不同的数据库中执行多
我已将以下服务方法注释为事务性: /* (non-Javadoc) * @see a.b.service.CustomerService#activateCustomer(a.b.m
以下是我的代码的一个代表性片段,其中在 transaction.Rollback() 处抛出了一个意外的异常,至少对我而言是这样。声明。 异常(exception)是类型 NHibernate.Tra
我试过将 COMMIT TRAN 放在 if else 循环中,但我仍然收到此错误。 我必须为一个类(class)招收一名学生。如果注册后的座位数为负数,我必须将其反转并打印一条消息说不能注册。我已经
我已经实现了一个具有事务的路由。当用户通过单击“后退”按钮移出这条路线时,我希望用户能够确认退出并丢失通过回滚事务所做的任何更改。 问题是,如果用户返回路由,Ember Data 会引发错误并指出:
当我从另一个事务方法调用一个事务方法时会发生什么,现在我的第二个事务方法已完成,并且它返回到第一个事务方法,不幸的是它失败了,所以它会回滚所有内容,意味着它会回滚第二个事务方法吗?交易方式改变..??
这个问题在这里已经有了答案: @Transactional method called from another method doesn't obtain a transaction (4 个回答)
我是一名优秀的程序员,十分优秀!