IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Deux persistences stack ensemble


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 28
    Par défaut Deux persistences stack ensemble
    Bonjour,

    Je suis sur un projet où la couche de persistence utilisée est en "Hibernate pure", à savoir un dataSource, une sessionFactory (org.springframework.orm.hibernate3.LocalSessionFactoryBean) avec comme mappingResources un ensemble d'entitées définies avec des fichiers hbm.xml.

    Pour faire accepter une migration vers une solution JPA, il faut que je fasse un petit exemple d'utilisation de JPA avec des entitées déjà existantes (on ne peut pas se permettre de tout changer d'un coup). Pour ce faire j'ai modifié le fichier persistence.xml pour y introduire un EntityManagerFactory et un TransactionManager ainsi que la persistence unit comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
            <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <class>com.blablabla.entity.EntityA</class>
        </persistence-unit>
    J'ai aussi modifier EntityA pour la rendre "JPA" compatible (@Id, @Column, etc.). La deux stack de persistence partage la même data source.

    Mon transactionManager me persiste/supprime bien mes entités (EntityA) cependant lorsque l'on a des foreign key entre une entité managée par JPa et une entité managée par du hibernate brute, là rien ne va plus.

    Example:
    soit EntityA une entité JPA et EntityB une entité au format hibernate hbm, avec une relation de type OneToOne (EntityA a EntityB.id comme clé étrangère)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    EntityB newEntityB = new EntityB(...);
    newEntityB = entityBDao.add(newEntityB); // Géré par une impl d'ORM qui utilise la sessionFactory
    EntityA newEntityA = new EntityA(newEntityB.id, ...);
    newEntityA = entityADao.add(newEntityA); // Géré par le bean transactionManager de JPA
    Apres ce code là, si l'on souhaite appeler le DAO de l'entité A pour faire par exemple un entityADao.loadByEntityBId qui nous retroune une entité A, on a une incohérence entre les caches (2ème niveau je pense?) des deux modèles: l'entité B n'est pas encore persistée et donc le dao de A nous retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (entityB_id)=(XX) is not present in table "EntitiesB"
    Des idées pour faire utiliser le même cache et pour gérer des entitées purement hibernate depuis JPA et vise-versa?

    Merci d'avance à ceux qui auront la patience de lire ce post en entier

  2. #2
    Membre averti
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 28
    Par défaut
    Il semble que le simple fait de rajouter un transactionManager pour les entités hibernate-managed permet d'avoir un cache partagé entre les entités jpa-managed et hibernate-managed. Les foreign-key semblent fonctionner à présent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <bean id="transactionManagerHibernate"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
      </bean>
      <tx:annotation-driven transaction-manager="transactionManagerHibernate" />
    Cependant, je n'arrive toujours pas à faire fonctionner le delete cascade entre deux entités: j'ai une relation many-to-one de A vers B, A étant une entité hibernate et B une entité JPA. Lorsque je supprime B, tous les A qui référencent B ne sont pas supprimés....

Discussions similaires

  1. persister des ensembles Clef/Valeur
    Par garniture dans le forum Doctrine2
    Réponses: 2
    Dernier message: 26/11/2013, 14h01
  2. Réponses: 2
    Dernier message: 20/08/2012, 15h55
  3. deux jars deux persistence.xml
    Par natoine dans le forum Hibernate
    Réponses: 3
    Dernier message: 03/08/2010, 02h38
  4. résultats de deux requetes affichés ensembles
    Par petitours dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/08/2007, 10h31
  5. Relier deux datagrid ensembles?
    Par Juho06 dans le forum VB.NET
    Réponses: 4
    Dernier message: 05/03/2007, 12h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo