Mon haricot ressemble à ceci:NHibernate: Violée contrainte non nulle lors de l'enregistrement relation hasMany avec Cascade = AllDeleteOrphan
public class A {
...
[HasMany (MapType = typeof(B), Table = "B_table", ColumnKey = "A_object_id",
Fetch = FetchEnum.Join,
RelationType = RelationType.List, Index = "id",
Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)]
IList<B> BList { get; set; }
...
}
et quand effectuer sur Enregistrer ce haricot Je pense que les haricots de type B seront automatiquement sauvés (et supprimé à la mise à jour) aussi. NHibernate essaie sûrement cela, mais il le fait avec B_table.A_object_id défini sur NULL en premier, puis NHibernate met à jour B_table en définissant la valeur B_table.A_object_id appropriée (c'est-à-dire: A.ID).
Ce n'est pas ce que je veux, car j'ai une contrainte NOT NULL dans la base de données.
Ma question est: comment faire NHibernate enregistrer automatiquement les objets enfants avec le bon jeu d'ID depuis le début? Je sais que je peux créer un bean, le sauvegarder, obtenir son nouvel identifiant, créer des beans B, définir leur A_object_id et ensuite enregistrer des beans B ... mais c'est une solution de contournement.
En fait, Je ne peux pas faire cela La classe B ne peut pas avoir une référence à A, car le mappage n'est pas si simple La classe B dans son B_table.A_object_id peut également référencer un objet de la table A2_table. classe A2 qui est objet de HasMany B. J'ai une condition CHECK appropriée dans la base de données pour valider une telle relation.Dans la perspective de la classe B, je n'ai pas besoin de savoir à quoi elle appartient – wysek
Puis la seule autre option que je connaisse (après un peu de recherche) est d'enlever la contrainte nulle. –
avez-vous résolu votre problème? Je me bats avec quelque chose de similaire à :( – frabiacca