Как получить StatelessSession при использовании Hibernate - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь получить StatelessSession, используя SessionFactory со следующим кодом:

final Session session = entityManager.unwrap(Session.class);
final SessionFactory sessionFactory = session.getSessionFactory();
final StatelessSession statelessSession = sessionFactory.openStatelessSession();

, но когда я тестирую код, происходит сбой со следующим исключением:

java.util.concurrent.ExecutionException: com.lightbend.lagom.javadsl.api.transport.TransportException: java.lang.ClassCastException: org.hibernate.internal.StatelessSessionImpl cannot be cast to org.hibernate.Session
at org.hibernate.persister.entity.AbstractEntityPersister.preInsertInMemoryValueGeneration(AbstractEntityPersister.java:3696)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3673)
at org.hibernate.internal.StatelessSessionImpl.insert(StatelessSessionImpl.java:111)
at org.hibernate.internal.StatelessSessionImpl.insert(StatelessSessionImpl.java:87)
at z.c.e.z.b.r.JPABatchRepository.lambda$null$0(JPABatchRepository.java:49)
at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:142)
at play.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:100)
at z.c.e.z.b.r.JPABatchRepository.wrap(JPABatchRepository.java:42)
at z.c.e.z.b.r.JPABatchRepository.lambda$createBatch$1(JPABatchRepository.java:47)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

У меня естьследовал этому уроку Работа с сеансом без сохранения состояния в hibernate и jpa , но, похоже, он не работает для меня.Я использую Lagom Framework и Hibernate 5.3.7.Final.Я также следовал руководству по Hibernate 5.3.7.Final , но безрезультатно.

Кто-то упомянул в этом вопрос StackOverflow , что это была ошибка, которая должна была быть исправлена ​​в 5.2.2, но я использую 5.3.7.Final и все еще получаю ошибку.

Кто-нибудь знает, как избавиться от этой ошибки?Или правильный способ получить экземпляр StatelessSession в Hibernate?

1 Ответ

0 голосов
/ 12 ноября 2018

Согласно этому сообщению об ошибке, сессия уже StatelessSession, поэтому вы должны иметь возможность развернуть ее как единое целое:

final StatelessSession session = entityManager.unwrap(StatelessSession.class);
...