[英]Hibernate Envers - DefaultRevisionEntity cannot be cast to javassist.util.proxy.Proxy
[英]Hibernate Envers DefaultRevisionEntity cannot be cast to class Quarkus
我有一個 quarkus 應用程序,它使用 hibernate envers 來審計實體更改。 審計工作正常(審計表被填滿)。 現在我想使用審計查詢 api 來加載我的實體的審計歷史,我得到了以下異常:
@Transactional
public List<BatchTaskDbo> getHistory(String id) {
AuditReader auditReader = AuditReaderFactory.get(entityManager);
AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity(BatchTaskEntity.class, false);
auditQuery.add(AuditEntity.id().eq(id));
auditQuery.addOrder(AuditEntity.revisionNumber().asc());
List<BatchTaskEntity> tasks = auditQuery.getResultList();
return tasks.stream().map(this.mapper::toDbo).collect(Collectors.toList());
}
org.jboss.resteasy.spi.UnhandledException: java.lang.ClassCastException: class org.hibernate.envers.DefaultRevisionEntity$HibernateProxy$98ycAi74 cannot be cast to class com.acme.envers.database.model.BatchTaskEntity (org.hibernate.envers.DefaultRevisionEntity$HibernateProxy$98ycAi74 and com.acme.envers.database.model.BatchTaskEntity are in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @3ac04654)
at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:106)
at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:372)
at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:218)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:519)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:261)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:161)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:164)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:247)
at io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java:73)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:138)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.access$000(VertxRequestHandler.java:41)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:93)
at io.quarkus.runtime.CleanableExecutor$CleaningRunnable.run(CleanableExecutor.java:231)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
at java.base/java.lang.Thread.run(Thread.java:834)
at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.ClassCastException: class org.hibernate.envers.DefaultRevisionEntity$HibernateProxy$98ycAi74 cannot be cast to class com.acme.envers.database.model.BatchTaskEntity (org.hibernate.envers.DefaultRevisionEntity$HibernateProxy$98ycAi74 and com.acme.envers.database.model.BatchTaskEntity are in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @3ac04654)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at com.acme.envers.database.core.DefaultBatchService.getHistory(DefaultBatchService.java:197)
at com.acme.envers.database.core.DefaultBatchService_Subclass.getHistory$$superaccessor2(DefaultBatchService_Subclass.zig:645)
at com.acme.envers.database.core.DefaultBatchService_Subclass$$function$$2.apply(DefaultBatchService_Subclass$$function$$2.zig:33)
at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:54)
at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:127)
at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:100)
at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:32)
at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:53)
at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:26)
at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(TransactionalInterceptorRequired_Bean.zig:340)
at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:41)
at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:41)
at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:32)
at com.acme.envers.database.core.DefaultBatchService_Subclass.getHistory(DefaultBatchService_Subclass.zig:602)
at com.acme.envers.database.core.endpoint.v1.DefaultBatchResource.lambda$getHistory$9(DefaultBatchResource.java:78)
at com.acme.envers.database.model.BaseEntity.withContext(BaseEntity.java:105)
at com.acme.envers.database.core.endpoint.v1.DefaultBatchResource.getHistory(DefaultBatchResource.java:78)
at com.acme.envers.database.core.endpoint.v1.DefaultBatchResource_ClientProxy.getHistory(DefaultBatchResource_ClientProxy.zig:140)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:170)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:130)
at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:643)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:507)
at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:457)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:459)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:419)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:393)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:68)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:492)
... 18 more
看起來查詢以這種方式不起作用,或者框架中存在錯誤。 如果我查詢修訂號然后收集實體,則不會發生 class 轉換異常。
@Transactional
public List<BatchTaskDbo> getHistory_Working_Version(String id) {
AuditReader auditReader = AuditReaderFactory.get(this.entityManager);
List<Number> revisions = auditReader.getRevisions(BatchTaskEntity.class,id);
List<BatchTaskEntity> tasks =new ArrayList<>();
for (Number revision : revisions) {
BatchTaskEntity revEntity = auditReader.find(BatchTaskEntity.class, BatchTaskEntity.class.getName(),
id, revision, true);
tasks.add(revEntity);
}
return tasks.stream().map(this.mapper::toDbo).collect(Collectors.toList());
}
您應該通過 Quarkus 問題跟蹤器上的復制者報告此問題: https://github.com/quarkusio/quarkus/issues/new?assignees=&labels=kind%2Fbug&template=bug_report.md&title=
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.