Je me suis cogné la tête contre un mur de briques pendant presque deux jours pour que toute aide soit géniale.Nhibernate - Référencer des objets transitoires dans des sessions déconnectées
Le scénario que j'ai est fondamentalement ceci.
J'ai un objet appelé Campaign
que je crée de toutes pièces dans un client Web. Le Campaign
a une référence à un autre objet, Portal
. Le Portal
a été extrait de la base de données via NHibernate. Quand je viens d'appeler CreateCampaign(Campaign cmp)
NH barfs dire que la référence à Portal
est transitoire et doit être enregistré en premier. Si je crée tout à partir de zéro alors ça fonctionne bien.
Donc, en bref, j'ai une nouvelle instance Campaign
qui fait référence à une instance détachée de Portal
. Les cascades sont définies sur 'enregistrer-mettre à jour, fusionner'. Ai-je besoin de recharger toutes les instances détachées dans la session avant de pouvoir appeler session.Save ou est-ce quelque chose d'autre que je ne suis pas au courant.
Désolé si cela semble un peu vague et pour l'absence de code, .. NDAs m'empêchent de poster et de code.
Merci d'avance.
n'a pas ce que cela signifie que je dois reconstruire la campagne si? J'ai beaucoup d'instances détachées plus bas dans le modèle, ce qui rendrait la plupart des opérations très impliquées. J'espérais que je pourrais juste passer la nouvelle campagne et laisser NH faire le reste, .. ou est-ce que je demande trop? – Stimul8d
Cet échange m'amène à conclure que le comportement de Lock dépend de vos paramètres de cascade: https://forum.hibernate.org/viewtopic.php?f=25&t=961144&view=next. Je ne sais pas si l'appel de Lock sur un objet persistant (Campaign) se répercuterait sur les objets enfants ou si vous deviez le faire vous-même. –
En fait, j'ai fini par changer les paramètres de cascade et en utilisant session.refresh et le session.merge. Vous êtes sur la bonne voie cependant, merci. – Stimul8d