1

多対多の関係を介して接続されている 2 つのエンティティ (ジョブと場所) があります。最近、場所エンティティにソフト削除ロジックを実装し、次のようにジョブ マッピングにフィルターを追加しました。

HasManyToMany(x => x.Locations)
.Table("JobLocation")
.ParentKeyColumn("JobId")
.ChildKeyColumn("LocationId")
.ApplyChildFilter<ExcludeDeletedFilter>("IsDeleted = :condition")
.Cascade.None();

多対多の関係のクエリは次のようになります

select ... 
from Job job
left outer join JobLocation jl
on jl.JobId = job.Id
left outer join Location loc
on loc.Id = jl.LocationId and IsDeleted = 0

問題は、いくつかの場所が削除されたジョブをフェッチするときに、ジョブ エンティティの Locations コレクションに、削除された各場所の null エントリが含まれることです。

多対多の関係を介してフェッチされたときに、このソフト削除レコードを処理する最良の方法は何ですか? (1 対多の場合、このフィルタは優れた機能を果たします)

これを行うには、他にどのような代替案を検討する必要がありますか?

4

1 に答える 1

1

リスト内のアイテムはインデックスに関連付けられています。リスト スタイルのマッピングを使用して永続化すると、これらのインデックスは保持されます (通常、リストが突然再配置されることはありません)。

いくつかのアイテムをフィルタリングする場合、表示されるアイテムの位置が安定するようにするには、非表示の要素に null アイテムが必要になります。

セット、バッグ、マップなど、別のマッピングの使用を検討してください。

于 2013-01-09T16:56:56.167 に答える