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

Hibernate Java Discussion :

Opérations persit merge etc personnalisées


Sujet :

Hibernate Java

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut Opérations persit merge etc personnalisées
    Bonjour,

    Je travaille actuellement sur un mapping assez délicat. Le schéma de base de donnée imposé par le client ne se prête pas du tout à un mapping hibernate pour une des entités. Par exemple, la table où l'entité doit être enregistrée dépend de la classe qui la contient. Et ce n'est qu'une des règles de gestion de la base de données qui ne correspond pas du tout à l'esprit Hibernate.

    Je me demandais si il était possible de définir entièrement manuellement les opérations à effectuer sur l'entité en question. Par exemple quand Hibernate veut enregistrer l'entité en base, il appellerait à la place une fonction de rappel où je ferais moi-même les requêtes SQL.

    Pour information, je connais les annotations @SQLInsert etc., mais elles ne sont pas suffisantes dans mon cas d'utilisation.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si c'est des tables séparées, pourquoi utiliser la même entité et pas des entités séparées?

    Si c'est pour faire toutes les requêtes toi même, autant te passer d'hibernate, je ne vois pas ce que tu compte gagner à utiliser hibernate.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Si c'est des tables séparées, pourquoi utiliser la même entité et pas des entités séparées?
    C'est le même concept, et ça devrait être une seule et même table. Le client en a décidé autrement. Côté Java, cette entité est gérée et générée par une multitude de processus métier. Je n'ai pas envie de faire une copie différente de ces processus pour chaque table ou l'entité peut être stockée. Le polymorphisme n'est pas une solution, car ces processus doivent pouvoir construire de nouvelles instances.

    Si c'est pour faire toutes les requêtes toi même, autant te passer d'hibernate, je ne vois pas ce que tu compte gagner à utiliser hibernate.
    J'ai plus de 60 autres entités qui ne posent aucun problème.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Est-ce que le choix de la table peut être fait uniquement à partir des données dans l'objet? Est-ce que secondarytables ne pourrait pas être abusé pour atteindre ton objectif, couplé à des propriétés dérivées? http://stackoverflow.com/questions/2...ax-persistance

    Aussi, si la sb le supporte, une vue pourrait être une solution.

    Aussi, il y a la solution de ne pas mapper cette table sur une entité, juste cette table si les autres fonctionnent. C'est pas top niveau architecture mais ça peut être isolé à bas niveau, via des pre/post contruct sur les entités en dépendant.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Je ne peux pas modifier la base de données elle-même, la raison pour laquelle j'ai ce problème est que le client a imposé un schéma inapproprié. Si je pouvais modifier la base de données, j'utiliserai juste une table pour cette entité.

    Pour l'instant, j'ai juste créé une classe pour chacune des tables cibles, et elle a un mapping Hibernate. L'entité est marquée @Transient, et n'est qu'un masque qui délègue toutes ses fonctionnalités aux classes tables. Ie quand on appelle un setter sur l'entité, elle appelle en faite le setter de la classe correspondant à la table cible. Assez crade, mais c'est invisible vu de l'extérieur du package. Le problème est qu'il y a un tas de code à copier à chaque utilisation.

Discussions similaires

  1. [11g] Comment utiliser les types de jointure (NL, MERGE etc) ?
    Par ctobini dans le forum SQL
    Réponses: 2
    Dernier message: 24/07/2014, 09h46
  2. Réponses: 8
    Dernier message: 25/06/2013, 14h53
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. [Choix] SGDB pour Entreprise : coût, efficacité, etc.
    Par grassat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 15/06/2002, 08h52

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