- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试实现一个 Hibernate session /事务拦截器,以避免在 Struts2 中对 json 结果产生 LazyInitializationException
,但无论如何我都会遇到此异常:
245968 [http-8080-7] ERROR util.HibernateEndTransInterceptor - org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:238)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:171)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:161)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:127)
at org.apache.struts2.json.JSONWriter.write(JSONWriter.java:95)
at org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:116)
at org.apache.struts2.json.JSONResult.createJSONString(JSONResult.java:196)
at org.apache.struts2.json.JSONResult.execute(JSONResult.java:170)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:374)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278)
at util.HibernateEndTransInterceptor.intercept(HibernateEndTransInterceptor.java:55)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:236)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at util.HibernateBeginTransInterceptor.intercept(HibernateBeginTransInterceptor.java:32)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at util.LoginInterceptor.intercept(LoginInterceptor.java:36)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:511)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:831)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:652)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1203)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:238)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:171)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:161)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:127)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:363)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:223)
... 73 more
Caused by: org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:238)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:171)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:161)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:127)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:363)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:223)
... 78 more
Caused by: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:238)
at org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:171)
at org.apache.struts2.json.JSONWriter.process(JSONWriter.java:161)
at org.apache.struts2.json.JSONWriter.value(JSONWriter.java:127)
at org.apache.struts2.json.JSONWriter.add(JSONWriter.java:363)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:223)
... 83 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:218)
... 88 more
Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:272)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
at com.lm.model.common.Language_$$_javassist_0.getName(Language_$$_javassist_0.java)
... 93 more
我的拦截器看起来像这样:
package util;
import java.util.Map;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import util.hibernate.HibernateUtil;
import com.lm.action.ActionsConstants;
import com.lm.action.user.Constants;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class HibernateEndTransInterceptor implements Interceptor, Constants, ActionsConstants {
private static final long serialVersionUID = -8734958511612355789L;
private static SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
private transient Logger log = Logger.getLogger(HibernateEndTransInterceptor.class);
private Session s=null;
private Transaction t=null;
@Override
public void destroy() {
}
@Override
public void init() {
}
@Override
public String intercept(final ActionInvocation invocation) throws Exception {
/*invocation.addPreResultListener(new PreResultListener() {
@Override
public void beforeResult(ActionInvocation arg0, String arg1) {
Map<String, ResultConfig> resultsMap = invocation.getProxy().getConfig().getResults();
//ResultConfig finalResultConfig = resultsMap.get(resultCode);
}
});*/
Map<String,Object> strutsSession = invocation.getInvocationContext().getSession();
String res=null;
try {
s=sessionFactory.openSession();
t = s.beginTransaction();
strutsSession.put("hibernateSession", s);
strutsSession.put("hibernateTransaction", t);
res=invocation.invoke();
t.commit();
} catch (Throwable t2) {
log.error(t2,t2);
try {
t.rollback();
} catch (Throwable t3) {
log.error(t3,t3);
}
} finally {
try {
s.close();
} catch (Throwable t) {
log.error(t,t);
}
strutsSession.remove("hibernateSession");
strutsSession.remove("hibernateTransaction");
}
return res;
}
}
这不起作用,我在 trans.commit()
和 session.close();
之前就得到了 LazyInitializationException
最佳答案
不要重新实现weel。如果您需要在 View 概念中实现打开 session ,请使用 Hibernate Full Plugin .如果您想修复 LazyInitializationException
,请将 FetchType.EAGER
放入集合中。
关于java - Struts 2 Json 结果 Hibernate LazyInitialization - 如何在 hibernate session 中反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15269786/
我有 3 个名为Discipline、DisciplineMembership、DisciplineManagement 的实体: 一个学科有多个学科成员 一个学科有多个学科管理 Discipline
我在EJB2.0层上使用事务,并从那里调用DAO层,其中对db进行hibernate调用。 我现在遇到的问题是,hibernate 正在对数据库进行多次调用,因为我设置了 lazy="false",现
我在一个简单的网络应用程序上使用 wicket 和 hibernate (jpa)。 Task.java与Load.java的关系如下: 任务.java: @ManyToOne( targetEnti
我在我的 java 项目中使用 Hibernate。我有以下实体结构: @Entity @Table(name = "car") public class Car implements Seriali
我正在查看 Reflector 中的 LazyInitializer.EnsureInitialized(ref T, Func{T}),该方法中似乎有一个 volatile 局部变量 volatil
我认为我缺少一些有关 Hibernate 工作原理的基本知识,特别是延迟加载。我的问题是调试,因为我不确定这是 Hibernate 问题还是变相的 Spring 问题。我想在进行一些重大重构之前我应该
LazyInitializer 之间有什么区别?和 Lazy类?我知道他们都只会按需初始化对象。我什么时候需要使用它们中的每一个? 最佳答案 我不确定你是否还在研究这个,但我不得不深入研究这两个 La
我使用 Hibernate 5.2.11 作为 JPA 提供程序。我有一个带注释的类 (PurchaseOrder) 和另一个带注释的类 (Customer) 作为具有多对一关系的字段。但因为遗留代码
我正在尝试实现一个 Hibernate session /事务拦截器,以避免在 Struts2 中对 json 结果产生 LazyInitializationException,但无论如何我都会遇到此
我的应用程序使用 Struts2(mvc)、Spring(依赖注入(inject))、带有 Hibernate 的 JPA、JUnit 以及 struts2-junit 插件和 struts2 spr
我是一名优秀的程序员,十分优秀!