Spring Boot Data JPA - Modificar consulta de actualización - Actualizar contexto de persistencia

Estoy trabajando con Spring Boot 1.3.0.M4 y una base de datos MySQL.

Tengo un problema al usar consultas de modificación, el EntityManager contiene entidades obsoletas después de que la consulta se haya ejecutado.

Depósito JPA original:
public interface EmailRepository extends JpaRepository<Email, Long> {

    @Transactional
    @Modifying
    @Query("update Email e set e.active = false where e.active = true and e.expire <= NOW()")
    Integer deactivateByExpired();

}

Supongamos que tenemosCorreo electrónico [id = 1, a, ctive = verdadero, caducar = 2015/01/01] en DB.

Después de ejecutar:

emailRepository.save(email);
emailRepository.deactivateByExpired();
System.out.println(emailRepository.findOne(1L).isActive()); // prints true!! it should print false
Primer enfoque para resolver el problema: agregarclearAutomatically = true
public interface EmailRepository extends JpaRepository<Email, Long> {

    @Transactional
    @Modifying(clearAutomatically = true)
    @Query("update Email e set e.active = false where e.active = true and e.expire <= NOW()")
    Integer deactivateByExpired();

}

Este enfoque despeja el contexto de persistencia para que no tenga valores obsoletos, pero elimina todos los cambios no vacíos que aún están pendientes en el EntityManager. Como solo usosave() métodos y nosaveAndFlush() se pierden algunos cambios para otras entidades :(

Segundo enfoque para resolver el problema: implementación personalizada para el repositorio
public interface EmailRepository extends JpaRepository<Email, Long>, EmailRepositoryCustom {

}

public interface EmailRepositoryCustom {

    Integer deactivateByExpired();

}

public class EmailRepositoryImpl implements EmailRepositoryCustom {

    @PersistenceContext
    private EntityManager entityManager;

    @Transactional
    @Override
    public Integer deactivateByExpired() {
        String hsql = "update Email e set e.active = false where e.active = true and e.expire <= NOW()";
        Query query = entityManager.createQuery(hsql);
        entityManager.flush();
        Integer result = query.executeUpdate();
        entityManager.clear();
        return result;
    }

}

Este enfoque funciona de manera similar a@Modifying(clearAutomatically = true) pero primero obliga al EntityManager a eliminar todos los cambios en la base de datos antes de ejecutar la actualización y luego borra el contexto de persistencia. De esta manera no habrá entidades desactualizadas y todos los cambios se guardarán en DB.

Me gustaría saber si hay una mejor manera de ejecutar declaraciones de actualización en JPA sin tener el problema de las entidades obsoletas y sin el vaciado manual a DB. ¿Quizás deshabilitar el caché de segundo nivel? ¿Cómo puedo hacerlo en Spring Boot?

Actualización 2018

Spring Data JPA aprobó mi PR, hay unflushAutomatically opción en@Modifying() ahora.

@Modifying(flushAutomatically = true, clearAutomatically = true)

Respuestas a la pregunta(2)

Su respuesta a la pregunta