persist() & delete() refactored to be using Repository::transaction()