简体   繁体   English

休眠query.getResultList()异常

[英]Hibernate query.getResultList() exception

query.getResultList() is failing for the following piece of code. query.getResultList()对于以下代码失败。

Query query=EntityManager.createQuery("select m from AbstractGasTrade m");
List<T> resultList = query.getResultList();

It throws following exception 它引发以下异常

javax.persistence.PersistenceException: org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: com.pse.lib.trading.energy.naturalgas.AbstractGasTrade at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614) at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:76) at com.pse.lib.db.dao.GenericDao.findAll(GenericDao.java:68) at com.pse.lib.db.logic.GenericManager.findAll(GenericManager.java:75) at com.pse.lib.db.logic.GenericManager.findAll(GenericManager.java:86) 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:309) at org.springframework.aop.framework.ReflectiveMethodInvocation. javax.persistence.PersistenceException:org.hibernate.InstantiationException:无法实例化抽象类或接口:org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)处的com.pse.lib.trading.energy.naturalgas.AbstractGasTrade com.pse.lib.db.dao.GenericDao.findAll(GenericDao.java:68)上的org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:76)在com.pse.lib.db.logic.GenericManager上。在com.pse.lib.db.logic.GenericManager.findAll(GenericManager.java:86)处的findAll(GenericManager.java:75)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处在sun.reflect.NativeMethodAccessorImpl.invoke( org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection上的java.lang.reflect.Method.invoke(Method.java:597)上的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)上的NativeMethodAccessorImpl.java:39) (AopUtils.java:309),位于org.springframework.aop.framework.ReflectiveMethodInvocation。 invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy29.findAll(Unknown Source) at com.pse.katana.services.possvc.PositionService.createPositionSegment(PositionService.java:180) at com.pse.katana.services.possvc.PositionService.handlePositionSubscription(PositionService.java:150) at com.pse.katana.services.possvc.PositionService.accept(PositionService.java:243) at com.pse.katana.messages.PositionSubscriptionRequest.visit(PositionSubscriptionRequest.java:43) at com.pse.katana.services.possvc.PositionService.dispatch(PositionService.java:266) at com.pse.lib.serviceng 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)在org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)上的invokeJoinpoint(ReflectiveMethodInvocation.java:183) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)处的.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172),位于com.pse.katana的$ Proxy29.findAll(Unknown Source)。 com.pse.katana.services.possvc.PositionService.accept(com.pse.katana.services.possvc.PositionService.handlePositionSubscription(PositionService.java:150)处的services.possvc.PositionService.createPositionSegment(PositionService.java:180) com.pse.katana.messages.PositionSubscriptionRequest.visit(PositionSubscriptionRequest.java:43)处的com.pse.katana.services.possvc.PositionService.dispatch(PositionService.java:266)处的PositionService.java:243) .lib.serviceng ine.processor.AsynchronousOperation.run(AsynchronousOperation.java:42) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: com.pse.lib.trading.energy.naturalgas.AbstractGasTrade at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:101) at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:123) at org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:374) at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:3634) at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1302) at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1291) at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:132 ine.processor.AsynchronousOperation.run(AsynchronousOperation.java:42)at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java: 908)在java.lang.Thread.run(Thread.java:662)原因:org.hibernate.InstantiationException:无法实例化抽象类或接口:com.pse.lib.trading.energy.naturalgas.AbstractGasTrade在org.hibernate位于org.hibernate.tuple的.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:101)。位于org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:374)的.tuple org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1302)上的org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:3634)在org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java: 1291)在org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:132 3) at org.hibernate.loader.Loader.getRow(Loader.java:1230) at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603) at org.hibernate.loader.Loader.doQuery(Loader.java:724) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) at org.hibernate.loader.Loader.doList(Loader.java:2228) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125) at org.hibernate.loader.Loader.list(Loader.java:2120) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401) at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361) at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67) ... 23 more 3)在org.hibernate.loader.Loader.getRow(Loader.java:1230)在org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603)在org.hibernate.loader.Loader.doQuery(Loader.java :724)在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)在org.hibernate.loader.Loader.doList(Loader.java:2228)在org.hibernate.loader.Loader.listIgnoreQueryCache(Loader。 org.hibernate.loader.Loader.list(Loader.java:2120)的org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)的org.hibernate.hql.ast.QueryTranslatorImpl的java:2125) org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)的org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)的.list(QueryTranslatorImpl.java:361) org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)的impl.QueryImpl.list(QueryImpl.java:102)...还有23个

It happens when one of the joined column has null value. 当连接的列之一具有空值时,会发生这种情况。

@JoinColumn(name = "PayDescriptor")
@ManyToOne(cascade = CascadeType.ALL)
private GasTradeDescriptor tradePriceDescriptor;

Problem is that we want to ignore the values for which joined column has null values and want to continue loading remaining non-null values. 问题是我们要忽略联接列具有空值的值,并希望继续加载其余的非空值。 For null values we just want to log the message. 对于空值,我们只想记录该消息。 We are not sure about the best possible approach to tackle this. 我们不确定解决此问题的最佳方法。 Any idea or suggestion about the best approach will be much appreciated. 关于最佳方法的任何想法或建议将不胜感激。

Many thanks in advance. 提前谢谢了。

Rab 拉布

As the exception states, you cannot instantiate an abstract class. 如异常所示,您无法实例化抽象类。 You didn't include the code for AbstractGasTrade but the name sure hints that it is, in fact, abstract. 您没有包括AbstractGasTrade的代码,但是该名称肯定表明它实际上是抽象的。

You need to create the query for one of its concrete children. 您需要为其具体子项之一创建查询。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM