【发布时间】:2012-10-19 10:01:31
【问题描述】:
我正在使用 Spring 3.1 并编写了我的 DAO 和服务层(事务)。
但是在特殊情况下,为了避免惰性初始化异常,我必须创建一个 spring mvc 请求处理程序方法@transactional。但它未能将事务附加到该方法。方法名称是 ModelAndView home(HttpServletRequest request, HttpServletResponse response)。 http://forum.springsource.org/showthread.php?46814-Transaction-in-MVC-Controller 从这个链接似乎不可能将事务(默认情况下)附加到 mvc 方法。该链接中建议的解决方案似乎适用于 Spring 2.5(覆盖 handleRequest )。任何帮助将不胜感激。谢谢
@Controller
public class AuthenticationController {
@Autowired
CategoryService categoryService;
@Autowired
BrandService brandService;
@Autowired
ItemService itemService;
@RequestMapping(value="/login.html",method=RequestMethod.GET)
ModelAndView login(){
return new ModelAndView("login.jsp");
}
@RequestMapping(value="/home.html",method=RequestMethod.GET)
@Transactional
ModelAndView home(HttpServletRequest request, HttpServletResponse response){
List<Category> categories = categoryService.readAll();
request.setAttribute("categories", categories);
List<Brand> brands = brandService.readAll();
request.setAttribute("brands", brands);
List<Item> items = itemService.readAll();
request.setAttribute("items", items);
Set<Image> images = items.get(0).getImages();
for(Image i : images ) {
System.out.println(i.getUrl());
}
return new ModelAndView("home.jsp");
}
【问题讨论】:
-
你想在这里回滚什么?在您定义了 @Transaction 注释的控制器函数上,没有可以回滚的数据库操作。我很困惑。
-
所有像 categoryService.readAll() 这样的服务调用都是数据库操作
-
是的,但你不能回滚读取的数据。你到底想回滚什么?
-
将 home 方法包装在事务中仍然很有用,因为它可能有助于共享数据库连接
-
是的,连接将被共享,延迟加载也只能在同一个会话中工作。
标签: java spring hibernate jakarta-ee spring-mvc