Muito provavelmente suas entidades ficam "sujas" no mesmo momento em que são carregadas do banco de dados, e o Hibernate pensa que precisa armazenar as alterações. Isso acontece se seus acessadores (métodos get e set) não retornarem exatamente o mesmo valor ou referência que foi definido pelo Hibernate.
Em nosso código, isso aconteceu com listas, os desenvolvedores criaram novas instâncias de lista porque não gostaram do tipo que obtiveram no setter.
Se você não quiser alterar o código, altere o mapeamento para acesso de campo.
Você também pode impedir que o Hibernate armazene alterações configurando FlushMode para nunca na sessão, mas isso apenas oculta o problema real que ainda ocorrerá em outras situações e levará a atualizações desnecessárias.