Saltar al contenido

¿Es posible usar “TRUNCATE” en Spring Data JPA usando JpaRepository? ¿O un método más eficaz que el estándar deleteAll()?

Después de consultar especialistas en esta materia, programadores de varias áreas y maestros dimos con la solución a la interrogande y la compartimos en esta publicación.

Solución:

Ejemplo, en su interfaz de servicio:

public interface MyTableInterface 
    //...

    void truncateMyTable();

En la implementación de su servicio (con @Autowired myTableRepository):

public class MyTableImpl implements MyTableService 

    // other methods, @Autowiring, etc

    @Override
    @Transactional
    public void truncateMyTable() 
        myTableRepository.truncateMyTable();
    

En tu repositorio;

public interface MyTableRepository extends JpaRepository 
    //....

    @Modifying
    @Query(
            value = "truncate table myTable",
            nativeQuery = true
    )
    void truncateMyTable();

EDITAR: También observe el @Transactional en la capa de implementación del servicio, en lugar de colocarlo en la capa DAO/Repositorio

deleteAll está obteniendo todas las entidades y luego las elimina una por una:

// Code from SimpleJpaRepository

@Transactional
public void deleteAll() 

    for (T element : findAll()) 
        delete(element);
    

Le sugiero que cree su propio método de eliminación en el repositorio como:

@Modifying
@Transactional
@Query("delete from MyEntity m")
void deleteAllWithQuery();

Esto creará solo una instrucción SQL DELETE.

Te mostramos las reseñas y valoraciones de los usuarios

Si te animas, tienes el poder dejar una reseña acerca de qué le añadirías a esta crónica.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *