Question

Avec Hibernate, pouvez-vous créer un identifiant composite dans lequel l'une des colonnes que vous mappez à l'identifiant peut avoir des valeurs NULL?

Il s’agit d’une table héritée qui a une clé unique qui peut avoir des valeurs NULL mais pas de clé primaire.

Je réalise que je pourrais simplement ajouter une nouvelle colonne de clé primaire à la table, mais je me demande s’il est possible de ne pas le faire.

Était-ce utile?

La solution

Non. Les clés primaires ne peuvent pas être nulles.

Autres conseils

Ceci n'est pas conseillé. Pourriez-vous utiliser une vue et une carte à la place? Vous pouvez utiliser COALESCE pour fournir une valeur par défaut si vous êtes bloqué avec des données héritées. Nous avons eu beaucoup de problèmes avec les clés composites et j'imagine que les valeurs NULL vont causer encore plus de problèmes.

Pour les clés composites (en supposant que la base de données autorise les valeurs nulles dans les PK), vous pouvez avoir un nombre maximal de numéros_de_colonnes ^ 2 - 1 entrées contenant des valeurs nulles (par exemple, pour une clé composée de 2 colonnes, vous pouvez avoir 3 lignes dont la clé primaire est null, le quatrième est le PK sans les nulls).

Pourquoi voudriez-vous faire cela? Votre identifiant composite doit mapper la clé primaire de votre table et il ne semble pas judicieux de mettre des valeurs nulles dans une clé, n'est-ce pas?

EDIT: Hibernate ne permet pas de le faire. vous pouvez placer la propriété en dehors de la clé et modifier légèrement le DAO pour prendre en compte le champ si nécessaire

Vous n'obtiendrez pas d'erreur, mais Hibernate ne sera pas en mesure de mapper ces lignes avec la valeur NULL pour la colonne composite à votre entité. Cela signifie que vous obtenez une entité avec des valeurs NULL dans le résultat.

Malheureusement, non. Je devais soit utiliser une solution de contournement:

J'ai utilisé composit Id pour une vue (! not table) où les lignes peuvent être identifiées par 2 colonnes exactement (A, B). Bien que l'un des cols (B) puisse avoir des valeurs nulles ainsi que des entiers positifs. La solution consiste donc à créer un nouveau col dans la vue: " BKey " et ma vue est écrite comme si B est null, alors la valeur de BKey est -1 sinon BKey = B. (Uniquement les entiers positifs apparaissent dans B et null). J'ai également changé l'implémentation de mon identifiant composite pour utiliser BKey au lieu de B. J'espère que ça aidera pour quelqu'un ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top