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 :

Génération de colonne nullable avec contrainte unique sous SQLServer


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Points : 64
    Points
    64
    Par défaut Génération de colonne nullable avec contrainte unique sous SQLServer
    Bonjour,

    Je rencontre un problème en voulant passer d'une base MySQL à une base SQLServer. J'ai une propriété Java mappée avec Hibernate en "unique=true" et "nullable=true".

    Sous MySQL cela ne pose pas de problème mais sous SQLServer, la contrainte d'unicité générée sur la colonne s'applique également sur les valeurs "null" (à priori ce problème est connu et assumé par SQLServer). Je ne peux donc pas insérer deux lignes avec une valeur "null" pour cette colonne. Cela provoque une régression importante dans mon application.

    J'utilise la classe utilitaire SchemaExport de Hibernate pour générer le script de création de mes tables pour les différents types de base (MySQL, SQLServer, Oracle, etc.)
    Je voudrais donc savoir s'il est possible de modifier le Dialect que j'utilise pour SQLServer afin de modifier le script SQL généré et ne plus avoir de contrainte d'unicité sur une colonne si celle-ci est "nullable".

    Savez-vous comment faire cela svp ?

    Merci.

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Citation Envoyé par Gob4 Voir le message
    Bonjour,

    Je rencontre un problème en voulant passer d'une base MySQL à une base SQLServer. J'ai une propriété Java mappée avec Hibernate en "unique=true" et "nullable=true".

    Sous MySQL cela ne pose pas de problème mais sous SQLServer, la contrainte d'unicité générée sur la colonne s'applique également sur les valeurs "null" (à priori ce problème est connu et assumé par SQLServer).
    Bonjour, avoir conjointement du nullable= true et la contrainte d'unicité sur la même colonne est du classique qu'on rencontre assez souvent sur les bases de données,donc pour moi ça devrait être géré par SQlServer, j'ai envie de te demander de vérifier si ce n'est pas une chaine 'null' et non la valeur la valeur null au sens de SQL Server que tu éssaies d'insérer . Peux tu vérifier ça? ça me parait tellement basique comme contrainte à gérer que je préfere que tu rejettes un coup d'oeil sur tes valeurs "nulles" que tu veux insérer.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Points : 64
    Points
    64
    Par défaut
    Merci pour ta réponse. J'ai bien vérifié et je confirme mon problème (même si cela m'étonne autant que toi).

    A priori c'est confirmé à l'adresse suivante : http://sqlpro.developpez.com/cours/s...partie2#L7.2.2

    REMARQUE : certains SGBDR comme MS SQL Server refuse de voir la présence de plusieurs marqueurs NULL dans la cas d'une contrainte d'unicité. D'autres comme InterBase refusent une contrainte d'unicité dépourvue d'une contrainte NOT NULL...

  4. #4
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    En effet, , je tombe des nuits, je suis curieux de savoir pourquoi une telle limite?? A mon avis pour ton problème, tu vas peut être obligé de repasser manuellement enlever la contrainte sur le SQL généré,ce n'est pas très propre je te l'accorde. Ou casser la contrainte au niveau du mapping hibernate, mais la conserver dans tes services CRUD métier.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Points : 64
    Points
    64
    Par défaut
    Dans le blog ci-dessous il y a un début d'explication sur les raisons de Microsoft...
    http://blog.developpez.com/sqlpro/p5..._norme_sql_iso
    C’est le défaut majeur de SQL Server et l’on peut s’étonner qu’il persiste depuis des lustres… Mais comme le contrôle de cette unicité repose sur le moteur de stockage, Microsoft refuse cette correction qui pourrait s’avérer très dangereuse.
    Concernant la solution que tu propose, c'est ce que je fais pour l'instant.

    Mais je me demande portant s'il n'existe pas une solution consistant à surcharger le moteur de génération du SQL pour SQLServer afin de ne pas avoir à modifier le script manuellement à chaque fois. Cela me permettrait de conserver la contrainte sur mon mapping.

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/08/2013, 11h55
  2. insert multi avec contrainte unique
    Par gianni17 dans le forum Requêtes
    Réponses: 1
    Dernier message: 28/10/2011, 16h48
  3. Récupérer la contrainte "unique" avec jdbc
    Par tomtom- dans le forum JDBC
    Réponses: 2
    Dernier message: 27/03/2008, 20h13
  4. Génération d'une liste de liste avec contraintes
    Par noresis dans le forum Prolog
    Réponses: 2
    Dernier message: 02/04/2007, 21h58
  5. SELECT : extraire 2 val d'1 colonne avec contraintes diff
    Par NiBicUs dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/03/2004, 14h56

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