trunca/eliminar de la clase de entidad

Tengo mi clase de entidad a través de un método. Estoy tratando de averiguar, cómo a través de la JPA JPQL o Criterios de la API podría emitir un truncate o eliminar. Creo que los criterios de la api es el modo más natural de trabajar con clases, y truncate es una operación más rápida así que estos son los preferidos. Esto es lo que escribí hasta ahora, pero no está seguro de qué agregar/cambiar al respecto.

    CriteriaBuilder cb = this._em().getCriteriaBuilder();
    cb.createQuery( _entityClass() ).from( _entityClass() );

nota: _entityClass devuelve MyEntity.class, no tengo otras referencias a MyEntity este es más generalizada la aplicación.

Yo creo que no hay tal cosa como truncate en JPQL, usted puede escribir un nativo de la consulta o el uso de JPQL «eliminar».

OriginalEl autor xenoterracide | 2014-04-24

1 Kommentar

  1. 13

    Suponiendo que MyEntity se refiere a la tabla que desea colocar puede proceder de la siguiente manera:

    //Criteria API (JPA 2.1 and above)
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaDelete<MyEntity> query = builder.createCriteriaDelete(MyEntity.class);
    query.from(MyEntity.class);
    em.createQuery(query).executeUpdate();

    o con un enfoque generalizado:

    public <T> int deleteAllEntities(Class<T> entityType) {
        CriteriaBuilder builder = em.getCriteriaBuilder();
        CriteriaDelete<T> query = builder.createCriteriaDelete(entityType);
        query.from(entityType);
        return em.createQuery(query).executeUpdate();
    }


    Del mismo modo para JPQL/consultas SQL:

    //JPQL
    em.createQuery("DELETE FROM MyEntity e").executeUpdate();
    
    //SQL
    em.createNativeQuery("TRUNCATE TABLE MyEntity").executeUpdate();

    o con un enfoque generalizado:

    public static <T> int deleteAllEntities(Class<T> entityType) {
        String query = new StringBuilder("DELETE FROM ")
                                .append(entityType.getSimpleName())
                                .append(" e")
                                .toString();
        return em.createQuery(query).executeUpdate();
    }
    
    public static <T> int truncateTable(Class<T> entityType) {
        String query = new StringBuilder("TRUNCATE TABLE ")
                                .append(entityType.getSimpleName())
                                .toString();        
        return em.createNativeQuery(query).executeUpdate();
    }

    Con los Criterios de la API sólo puede usar SELECT, UPDATE, DELETE, por lo tanto TRUNCATE no es posible.

    curioso puede crear*la Consulta se hizo para el trabajo de la clase?
    ¿A qué te refieres por «el trabajo de la clase«? Podría por favor elaborar la pregunta?
    Tengo una referencia a MyEntity.class no tengo la cadena "MyEntity" de hecho yo mutado esto para que CriteriaDelete<MyEntity> es sólo un elenco (CriteriaDelete) porque no me gusta más paramaterizing con ENTITY
    Usted podría tratar de usar Java generics, así que usted no necesita para lanzar y parametrizar una consulta determinada, consulte la actualización de la respuesta anterior…
    no parece como mi genéricos en este caso, algo acerca de la extiende en el genérico

    OriginalEl autor wypieprz

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea