hibernate proxy异常

javaee_ssh 2014-08-15 11:10:02
背景:最近搭建struts2,spring4,hibernate 4 的框架。
问题:查询用户fetch=join部门不报错,使用代理延迟加载就报错(我做登陆校验用户密码时,不需要加载部门)。
配置:



@Entity
@Table(name = "T_USER")
public class User {
....
....
@ManyToOne
@LazyToOne(LazyToOneOption.RROXY)
public Department getDept() {
return dept;
}

public void setDept(Department dept) {
this.dept = dept;
}

}


异常:

Caused by: java.lang.ClassCastException: com.jst.myjstBase.model.Department_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxy(JavassistLazyInitializer.java:147)
at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.java:75)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:771)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:4613)
at org.hibernate.event.internal.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:349)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:270)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:150)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1070)
at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:989)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:716)
at org.hibernate.type.EntityType.resolve(EntityType.java:502)
at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:170)
at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:144)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1114)
at org.hibernate.loader.Loader.processResultSet(Loader.java:972)
at org.hibernate.loader.Loader.doQuery(Loader.java:920)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)
at org.hibernate.loader.Loader.doList(Loader.java:2553)
at org.hibernate.loader.Loader.doList(Loader.java:2539)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369)
at org.hibernate.loader.Loader.list(Loader.java:2364)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:231)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
at com.jst.myjstBase.DAO.impl.UserDAOImpl.findUserByLoginName(UserDAOImpl.java:24)
at com.jst.myjstBase.service.impl.UserServiceImpl.findUserByLoginName(UserServiceImpl.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at $Proxy20.findUserByLoginName(Unknown Source)
at com.jst.common.service.impl.ShiroDbRealm.doGetAuthenticationInfo(ShiroDbRealm.java:54)
at org.apache.shiro.realm.AuthenticatingRealm.getAuthenticationInfo(AuthenticatingRealm.java:568)
at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:180)
at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267)
at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198)
... 95 more
...全文
501 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaee_ssh 2014-08-15
  • 打赏
  • 举报
回复
弄了两个javassist.jar真是惭愧,删除了低版本的,系统正常,谢谢大家,散分。
  • 打赏
  • 举报
回复
引用 4 楼 javaee_ssh 的回复:
可以用

@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="dept_id")
	public Department getDept() {
		return dept;
	}
不可以用,报错

@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="dept_id")
	public Department getDept() {
		return dept;
	}
我记得以前报过这个错,是因为spring事务配置的问题
javaee_ssh 2014-08-15
  • 打赏
  • 举报
回复
可以用

@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="dept_id")
	public Department getDept() {
		return dept;
	}
不可以用,报错

@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="dept_id")
	public Department getDept() {
		return dept;
	}
  • 打赏
  • 举报
回复
用的都是什么包 看下,应该存在多个包都包含注解类LazyToOne,最后转型错误。 使用hibernate4自带的required里的lib即可。
javaee_ssh 2014-08-15
  • 打赏
  • 举报
回复
去掉@LazyToOne(LazyToOneOption.PROXY)可以运行,但会把 部门的信息left out join出来。
  • 打赏
  • 举报
回复
类匹配错误,是不是代理找错类了

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧