java invoke异常_java – 处理服务层中的异常

您能否建议如何克服下面描述的问题:

有一个应用程序(它涉及使用Hibernate和Spring框架)有3层:DAO,服务和控制器.我想避免在DB中保存重复的实体.我通过在DB级和bean中的注释中使用约束来实现它(@Table(name =“artist”,uniqueConstraints = {@UniqueConstraint(columnNames =“artist_name”)})).

逻辑假设如果我尝试添加重复实体,则抛出异常.我尝试在服务层处理异常但它未能成功.我的意思是,即使我明确注意到抛出的所有异常,由于异常,应用程序无法继续工作.为了更清楚,我引用下面的代码:

DAO-层

@Override

public void saveEntity(Client client) {

Session session = sessionFactory.getCurrentSession();

session.save(client);

}

服务层

@Transactional

@Override

public boolean saveEntity(Artist entity) {

boolean completedState = false;

try {

//method from DAO-layer

artistDAO.saveEntity(entity);

} catch (ConstraintViolationException | UnexpectedRollbackException e) {

return completedState;

}

return completedState = true;

}

调节器

@RequestMapping(value="addArtist", method=RequestMethod.POST)

public String processNewArtistForm(@ModelAttribute Artist artist, Model model) {

//If duplicated artistName prompts to be saved an saveEntity(entity) returns "false". Entity is failed to save.

boolean completedState = false;

completedState = artistService.saveEntity(artist);

if (completedState == true) {

List listOfArtists = artistService.getListOfEntities();

model.addAttribute("listOfArtists", listOfArtists);

} else {

model.addAttribute("errorMessage", "An artist under present name already exists");

return "newArtist";

}

return "listOfArtists";

}

当我尝试保存重复实体时Tomcat的通知

Type Exception report

message Request processing failed; nested exception is org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)

org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)

javax.servlet.http.HttpServlet.service(HttpServlet.java:644)

org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)

javax.servlet.http.HttpServlet.service(HttpServlet.java:725)

org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only

org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:720)

org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:521)

org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)

org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)

org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)

org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)

com.sun.proxy.$Proxy29.saveEntity(Unknown Source)

web.ArtistsListController.processNewArtistForm(ArtistsListController.java:66)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

java.lang.reflect.Method.invoke(Method.java:606)

org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)

org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)

org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)

org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)

org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)

org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)

org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)

javax.servlet.http.HttpServlet.service(HttpServlet.java:644)

org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)

javax.servlet.http.HttpServlet.service(HttpServlet.java:725)

org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

note The full stack trace of the root cause is available in the Apache Tomcat/8.0.9 logs.

如果这些架构解决方案是否正确,请问您能否提出建议?先感谢您.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值