Shit, we weren't setting the revision on concrete DTO creation.

Whoops!
executeAllOrNothing doesn't surface update conflict exceptions. Using executeBulk does, and let me see that we weren't setting DTO revision before update. We should consider taking revision in the DTO constructors to make this more memorable for future DTO/DAO implementors.