Utilisation simultanée des données Hibernate et Spring jpa?

Est-il possible d’utiliser Spring Data JPA (soutenu par Hibernate en tant que fournisseur JPA) et d’utiliser directement Hibernate en même temps?

Le problème est que lorsque j’utilise JpaTransactionManager, je ne parviens pas à récupérer la session en cours avec org.hibernate.HibernateException: No Session found for current thread . Lorsque je passe au gestionnaire HibernateTransaction, les référentiels JPA ne peuvent pas valider les modifications.

Voici la partie de mon contexte de spring (avec ce contexte, je ne suis pas capable d’utiliser les appels directs d’Hibernate):

                  

Exemple de référentiel Hibernate:

 public Collection listCurrent(Carrier carrier) { Criteria query = sessionFactory.getCurrentSession() .createCriteria(Layer.class) .add(Ressortingctions.eq("carrier", carrier)); query.createCriteria("bitrate") .addOrder(Order.desc("bitrate")) .add(Ressortingctions.eq("symbolrate", carrier.getSymbolrate())); return query.list(); } 

Exemple de définition du référentiel de données Spring:

 public interface BitrateRepository extends PagingAndSortingRepository { } 

Version du logiciel:

 4.0.0.RELEASE 1.4.3.RELEASE 4.3.0.Final 

La question est donc de savoir s’il est possible d’utiliser dans la même transaction (spécifiée par l’annotation @Transactional) les référentiels Spring JPA et les appels directs Hibernate et comment y parvenir.

Au lieu de créer une SessionFactory, utilisez EntityManager.unwrap(Session.class) pour obtenir une session Hibernate et récupérer la fabrique de session à partir de l’object Session.

Vous pouvez également utiliser EntityManagerFactory.unwrap(SessionFactory.class) pour obtenir directement Hibernate SessionFactory.

Vous avez besoin d’un seul moyen de configuration que vous configurez maintenant Hibernate et JPA. Vous devriez utiliser JPA pour la configuration, alors supprimez la configuration de mise en veille prolongée.

Vous utilisez Hibernate4 pour que vous puissiez tirer parti du, moins connu, HibernateJpaSessionFactoryBean of Spring. Si vous avez besoin d’accéder à la SessionFactory (dont je suppose que vous avez besoin).

Une fois appliquée, votre configuration ressemblera à quelque chose comme ça.

           

Je suggère de ne l’utiliser que comme une solution intermédiaire pendant que vous modifiez votre application pour utiliser les api JPA simples. Je ne suggérerais pas de mélanger les deux stratégies.