The comments says it all, I think:
public virtual void
is mapped using where="IsCancelled = 0"
* When we
cancel a Position, we are logically deleting it.
* This plays
havoc with the 2nd level cache, because the
* is cached,
and the Position with the cached Id can no longer be loaded from the
Employee.Positions is mapped using cascade="all" and
* So, we can
remove the Position from the Employee, which will make it
* with the
2nd level cache, but because it is mapped as inverse="true",
* will not
propogate the change to the database, so when we save the
EmployeeId will not be modified.
IsCancelled = true;