Hibernate缓存,持久化引发的问题

来源:互联网 发布:淘宝怎么样修改评价 编辑:程序博客网 时间:2024/05/16 09:17

在用Hibernate的时候出现下面异常

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.lgyw.emg.entity.Departmentat grails.orm.HibernateCriteriaBuilder.invokeMethod(HibernateCriteriaBuilder.java:1163)at com.cn.service.TransportEnterpriseService.search(TransportEnterpriseService.groovy:23)at com.cn.service.TransportEnterpriseService$$FastClassByCGLIB$$55d33b3b.invoke(<generated>)at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)at com.cn.service.TransportEnterpriseService$$EnhancerByCGLIB$$563ce738.search(<generated>)at com.cn.service.TransportEnterpriseService$search.call(Unknown Source)at com.cn.entity.TransportEnterpriseController$_closure2.doCall(TransportEnterpriseController.groovy:39)at com.cn.entity.TransportEnterpriseController$_closure2.doCall(TransportEnterpriseController.groovy)at org.grails.plugin.resource.DevModeSanityFilter.doFilter(DevModeSanityFilter.groovy:44)at org.apache.shiro.grails.SavedRequestFilter.doFilter(SavedRequestFilter.java:55)at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:359)at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:275)at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:344)at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:272)at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:81)at java.lang.Thread.run(Thread.java:619)

这个异常的意思是,在一对多或者多对多的时候出现,关于这个问题网上的解答一大堆,也就是级联操作归谁管的问题。但是,对于我却没多大帮助,因为我本来只是一个查询语句,根本没有调用save()啊,找了很久的原因,最后终于启动系统的时候已经加载了一部分数据进入内存,然后在实时查询的时候,这个内存中的数据和现有的数据不对应,然后hibernate会认为数据发生了改变,然后通过持久化对象写入数据库中,继而引发一条save语句。