PasswordとPasswordHashの2つのエンティティがあります。PasswordにはPasswordHashesのコレクションがあります(これらは異なるマスクのハッシュです)。
パスワードを削除するとき、関連するすべてのPasswordHashも削除したいと思います。
私は次のようにマッピングを行いました:
mapping.HasMany(x => x.PasswordHashes)
.Cascade
.All()
.Inverse()
.ReferencedBy(x => x.Password);
2つのクエリが生成されることを期待していました。
DELETE FROM "PasswordHash" WHERE "IdPassword" = :p0
そして明らかに
DELETE FROM "Password" WHERE "IdPassword" = :p0
代わりに、NHibernateは次のようなN+1クエリを生成しました。
DELETE FROM "PasswordHash" WHERE "IdPasswordHash" = :p0 (N)
と
DELETE FROM "Password" WHERE "IdPassword" = :p0 (1)
この動作をより最適に変更するにはどうすればよいですか?
編集:削除するコード:
session.Delete(password);
session.Flush();