2017-05-19 3 views
0

J'utilise NHibernate 4,NHibernate, actualisez objet modifed lance AssertionFailure {identificateur null}

Je voudrais mettre en œuvre une fonction qui permet de rafraîchir un objet modifié. Mon objet contient un identifiant et une association d'un à plusieurs avec des objets avec ad ID2 une chaîne

Dans mon association, insertion d'une nouvelle association d'objets, de sorte ID2 est nulle parce qu'elle génère par hilow générateur quand sauver la principale objet dans la base de données.

donc quand je cause de rafraîchissement pour recharger l'objet original, j'ai un assertion failure (null identifier) quand il y a un nouvel objet avec ID = null (il est normalement ok, pas de problème quand je saveOrUpdate. je mets notFound = ignore dans mon application, mais sans effet quand exécuter.

S'il vous plaît me donner un moyen pour résoudre mon problème

Nous vous remercions à l'avance.

+1

S'il vous plaît modifier votre question avec un code, merci! –

Répondre

0

dans mon association, insérer un nouveau obj ect association, donc ID2 est nul car il génère par le générateur hilow lors de la sauvegarde de l'objet principal dans la base de données.

Il existe une déclaration quelque peu inexacte ici. La stratégie de générateur hilo génère l'ID avant que l'objet soit inséré dans la base de données. Il le fait sur Save, sans Save en train d'insérer réellement l'entité dans la base de données jusqu'à ce que la session soit vidée.

Si votre ID reste null, cela est très probable car vous n'avez pas encore persisté l'entité dans la session. Appelez Save dessus, et votre identifiant ne sera plus null, alors que l'entité ne sera pas encore dans la base de données sauf si vous avez vidé la session (ou changé la stratégie de générateur pour celle nécessitant une insertion immédiate, comme identity).

Maintenant rafraîchir un objet qui ne se trouve pas déjà dans la base de données me semble quand même une erreur. Qu'attendez-vous d'une telle opération?

not-found="ignore" n'est pas conçu pour gérer le rafraîchissement d'entités inexistantes. Il est là pour permettre d'ignorer une clé étrangère invalide dans la base de données.

+0

ok, merci pour votre aide. Je m'attends à recharger mon objet principal depuis la base de données avec le bon timeqtamp car le flush indique mon objet sauvegardé par un autre utilisateur depuis le chargement. – Christ121212

+0

Je ne cherche pas à arrêter l'application mais à actualiser les objets. – Christ121212

+0

Je suis désappointé car je ne trouve pas de code général pour ce cas: sauvegarder avec la transaction optimist et l'horodatage est ancien. – Christ121212