由于与javassist.util.proxy.proxy不兼容而导致HIbernate JPA

由于与javassist.util.proxy.proxy不兼容而导致HIbernate JPA,java,hibernate,jpa,proxy,Java,Hibernate,Jpa,Proxy,HIbernate JPA与javassist.util.proxy.proxy不兼容导致 代码 public class EntityA { @Id private String id; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "entityB_id") private EntityB entityB; @ManyToOne(fetch = FetchType.LAZY)

HIbernate JPA
javassist.util.proxy.proxy
不兼容导致

代码

public class EntityA {
    @Id
    private String id;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "entityB_id")
    private EntityB entityB;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "entityC_id")
    private EntityC entityC;
}

String sql = "select o from EntityA o "
        + "left outer join o.entityB as o1 ";
final TypedQuery<EntityA> query = getEm().createQuery(sql, EntityA.class);

final List<EntityA> result = query.getResultList();

好的,我也遇到了这个问题。 经过研究,我得出以下结论:

  • javassist太旧或丢失 对于较旧的Spring版本,必须添加/更新javassist。 您可以从Maven Repository获取最新信息。

  • 如果您遇到
    org.hibernate.LazyInitializationException:无法初始化代理-无会话
    错误,这是因为您试图在连接关闭后执行延迟加载。您可能需要在服务/控制器中添加一个
    @Transactional
    注释(取决于项目的设计),可以是类级别,也可以是方法级别


  • 好的,我也遇到了这个问题。 经过研究,我得出以下结论:

  • javassist太旧或丢失 对于较旧的Spring版本,必须添加/更新javassist。 您可以从Maven Repository获取最新信息。

  • 如果您遇到
    org.hibernate.LazyInitializationException:无法初始化代理-无会话
    错误,这是因为您试图在连接关闭后执行延迟加载。您可能需要在服务/控制器中添加一个
    @Transactional
    注释(取决于项目的设计),可以是类级别,也可以是方法级别


  • 可能类路径上的库有问题。我不认为这是图书馆的问题。我看到很多帖子都是关于java.lang.ClassCastException的:xxxx不能强制转换为javassist.util.proxy.proxy,但这与javassist.util.proxy.proxy不兼容。这种关联似乎迫使我加入父实体上声明的所有实体。可能库有不同的版本,并且可能会根据其版本为
    ClassCastException
    创建另一条消息。但是,您仍然可能面临相同的问题。您确定异常是由
    getResultList()
    调用引起的吗?是的,非常确定。从堆栈跟踪中可以看到,行号指向“final List result=query.getResultList();”可能是类路径上的库有问题。我不认为这是图书馆的问题。我看到很多帖子都是关于java.lang.ClassCastException的:xxxx不能强制转换为javassist.util.proxy.proxy,但这与javassist.util.proxy.proxy不兼容。这种关联似乎迫使我加入父实体上声明的所有实体。可能库有不同的版本,并且可能会根据其版本为
    ClassCastException
    创建另一条消息。但是,您仍然可能面临相同的问题。您确定异常是由
    getResultList()
    调用引起的吗?是的,非常确定。它显示在堆栈跟踪中,其中的行号指向“final List result=query.getResultList();”
    Caused by: java.lang.ClassCastException: xxx.xx.xx.EntityC_$$_javassist_105 incompatible with javassist.util.proxy.Proxy
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxy(JavassistLazyInitializer.java:148)
    at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.java:73)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:758)
    at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:4419)
    at org.hibernate.event.internal.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:334)
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:260)
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152)
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1053)
    at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:980)
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:714)
    at org.hibernate.type.EntityType.resolve(EntityType.java:502)
    at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:168)
    at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:137)
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1112)
    at org.hibernate.loader.Loader.processResultSet(Loader.java:969)
    at org.hibernate.loader.Loader.doQuery(Loader.java:917)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:348)
    at org.hibernate.loader.Loader.doList(Loader.java:2550)
    at org.hibernate.loader.Loader.doList(Loader.java:2536)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2366)
    at org.hibernate.loader.Loader.list(Loader.java:2361)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:495)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:357)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:198)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1230)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:268)
    at sun.reflect.GeneratedMethodAccessor213.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
    at java.lang.reflect.Method.invoke(Method.java:620)
    at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:368)
    at com.sun.proxy.$Proxy153.getResultList(Unknown Source)
    at com.cimb.module.payment.bill.ce.dao.CEMYCCPayeeAccessBean.findNormalByPayeeNameKeyword(CEMYCCPayeeAccessBean.java:59)
    at com.cimb.module.payment.bill.atom.RetrieveBillerByKeywordMYAtom.performNormalBillerSearch(RetrieveBillerByKeywordMYAtom.java:58)
    at com.cimb.module.payment.bill.atom.RetrieveBillerByKeywordMYAtom.proceedNextStep(RetrieveBillerByKeywordMYAtom.java:45)
    at core.logic.DefaultLogicProcessor.process(DefaultLogicProcessor.java:78)
    ... 94 more