我有几个类注释为@Transactional
例如,我有第一类,这是Spring旋转变压器
<annotation-driven>
<mvc:argument-resolvers>
<beans:bean class="TestResolver" />
</mvc:argument-resolvers>
</annotation-driven>
类
@Transactional
public class TestResolver implements HandlerMethodArgumentResolver {
@SuppressWarnings("unchecked")
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
return testDao.load(Test.class, 1L)
}
}
我有一个控制器类,也标注了@Transactional
@Controller
@Transactional
@RequestMapping(value = "go")
public class TestController {
@RequestMapping...
public Test get() {
return testDao.load(Test.class, 1);
}
}
问题是每次我访问testDao.load(Test.class,1)hibernate时都会向数据库发出查询,而不是拉Test。控制器中的缓存中的类id=1。
为什么它不使用缓存?这两个调用在每个请求中发生,但似乎在不同的会话中。
如果我在控制器中这样做
testDao.load(Test.class, 1);
testDao.load(Test.class, 1);
第二次它使用缓存,但不是当两个不同的组件执行它们代码.
我想我需要做
类OpenSessionInViewFilter
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate4/support/OpenSessionInViewFilter.html
但是以前从未使用过它,但它应该允许保留会话整个请求
整个类上的< code>@Transactional注释在这里有点不太合适(这并不是说这总体上是个坏主意,只是这样理解问题会更困难),将它放在方法上会使这里发生的事情变得更明显——每个被调用的方法都在一个单独的事务中被调用(除非一个方法实际上调用了第二个方法,但我的理解是它们是按顺序被调用的)。
Hibernate可能决定它不应该跨两个事务使用缓存。
我是Spring MVC和HiberNate的新手,我的会话配置有问题。我是通过使用Hibernate来做到这一点的。我现在想做的是将在DAO中自动装配会话工厂。 这是应用程序上下文。xml - 这是完整的堆栈跟踪。 这是刀的代码 购物车控制器
在我的代码中,服务方法savePerson被注释为@Transactional。在这个方法中,Person实体被持久化,并且在中间故意抛出运行时异常。我支持不提交事务,但Person实体将保留在数据库中。。。。回滚不起作用,我不知道为什么。 这是我的Hibernate配置: 这是我的服务: 刀
我有两个方法,它们都被注释为@Transactional。 我知道这两种方法将在两个不同的事务中执行。 但是这两个方法是在一个Hibernate会话中执行吗? spring事务管理器将会话保持到http请求结束。 我知道事务管理器可能会在它的 aop 代理中执行类似操作: 我只是找不到代码,如果我能在某处找到代码,我可以自己回答这个问题。
将Hibernate空间升级到版本5.0.0.CR2后,以下声明不再起作用: 与一个: 如我所见,这个类不再存在于Jar文件中。几何类型发生了什么变化,它是如何被取代的?或者有另一个jar文件要包含吗? 编辑:澄清。我正在将Hibernate-Spatial与PostgreSQL-Postgis数据库结合使用。
另一种方法是使用Crieteria关联,但关联只能与和一起工作! 请在这里帮帮我。
我有两个实体,由单向连接OneTo很多: 当我试图用汽车创造我的司机时,像这样 ENVERS创建: 驱动程序表中包含新驱动程序数据的行,//例如,ID=1 包含新车数据的CAR表中的一行,//例如,ID=3 修订实体表中的一行,//例如,ID=8 驱动程序中的一行\u AUD: 一辆车有两排: 所以当我试图修改ID=1的驱动程序时 我得到了HibernateException,因为有两行具有相同的