Soy nuevo en Hibernación.

Estoy tratando de conseguir una lista de nombre y apellido de todos los administradores.

Hay dos advertencias en mi siguiente código. Ya he probado a buscar en una línea mucho.

1) la Consulta es un crudo tipo. Referencias genéricas tipo de Consulta debe ser parametrizado.

2) El método list() a partir de la Consulta de tipo está en desuso.

public List<Object> loadAllAdmins() {
                List<Object> allAdmins = new ArrayList<Object>();
                try {
                        HibernateUtil.beginTransaction();

                        Query q = currentSession.createQuery("SELECT admin.firstName, admin.lastName from AdminBean admin");

                        allAdmins= q.list();

                        HibernateUtil.commitTransaction();
                } catch (HibernateException ex) {
                        System.out.println("List<AdminBean> loadAllPersons: HibernateException");
                }
                return allAdmins;
        }

Pero veo que muestra un código como este en toda la web. ¿Cómo debo resolver estos dos problemas?

Actualización

Sólo traté de usar Criterios como se sugiere. También dice que la lista() método que se van a dejar de usar para los Criterios… parece que un montón de métodos que se van a dejar de usar tanto para Consulta y Criterios, incluyendo uniqueResult() y otros… Cualquier sugerencia de cómo debo cambiar?

Tal vez inspeccionar dado clase en JavaDoc, no puede ser una sugerencia – docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/query/… .

OriginalEl autor Chenya Zhang | 2016-07-19

6 Comentarios

  1. 12
    public List<Admin> getAdmins() {
        List<Admin> AdminList = new ArrayList<Admin>(); 
        Session session = factory.openSession();
        for (Object oneObject : session.createQuery("FROM Admin").getResultList()) {
            AdminList.add((Admin)oneObject);
        }
        session.close();
        return AdminList;
    }

    Las advertencias vienen de «la Inferencia de Tipo».

    Tuve el problema similar. Sin embargo, he encontrado una solución sin «SuppressWarnings».


    Recientemente, me encontré con un camino más corto para el código de las mismas cosas sin la inferencia de tipos.

    public List<Admin> getAdmins() {
        Session session = factory.openSession();
        TypedQuery<Admin> query = session.createQuery("FROM Admin");
        List<Admin> result = query.getResultList();
        session.close();
        return result;
    }

    Espero que ayude.

    Este parece ser el mismo procedimiento indicado en mi respuesta, con la excepción de una conversión explícita ¿no ? No es un tiempo de ejecución de disadavantage a emitir cada objeto claramente (ver stackoverflow.com/questions/2170872/…) ?
    1. No. Como he dicho, El suprimir la advertencia es eliminado. 2. Sí, pero creo que valdría la pena. Es generalmente vale la pena tratar de encontrar una manera de evitar la advertencia en lugar de evitarla.

    OriginalEl autor Pika

  2. 3

    He probado otros métodos de hibernate javadoc y se me ocurrió getResultList() método de la TypedQuery<T> de la interfaz. Ejemplo:

    public List<Admin> getAdmins() {
      Session session = factory.openSession();
      @SuppressWarnings("unchecked")
      List<Admin> result = session.createQuery("FROM Admin").getResultList();
      session.close();
      return result;
    }

    La diferencia es que el tipo devuelto de createQuery no es Query pero una subinterface llamado TypedQuery<T>. Porque es escribió, también revisiones de la Consulta «es un crudo tipo de» advertencia.

    Con esta solución usted puede obtener un Tipo de Seguridad advertencia, la cual puede ser resuelto por cualquiera de fundición de cada objeto de forma explícita o por la adición de @SuppressWarnings("unchecked")

    Con respecto a los criterios de ver hibernate guía del usuario

    Sin embargo, me pregunto por qué los tutoriales de la página de hibernación no está ajustado.

    Este método es demasiado obsoleto!
    createQuery() no es obsoleto y getResultList() no es obsoleto.consulte docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/query/….

    OriginalEl autor Johannes H

  3. 0

    Intenta utilizar criterios?

    Ver que ejemplo:

    public List<NoteVO> listNotes() {
        Session session = HibernateSessionFactory.getSession();
    
        Criteria crit = session.createCriteria(NoteVO.class);
    
        List<NoteVO> listNotes = crit.list();
    
        session.close();
        return listNotes;
    }
    Sí, acabo de probar. También dice que la lista() método que se van a dejar de usar por Criterios como bien… parece que «todos los métodos» se van a dejar de usar tanto para Consulta y Criterios, incluyendo uniqueResult() y demás… no sé por qué esto nunca podría suceder. Hice exactamente lo mismo que todos los tutoriales en línea.
    createCriteria() es @Deprecated en modo de Hibernación 5.2.

    OriginalEl autor A. Horst

  4. 0

    Según Crear Una Consulta De Hibernate , hay dos tipos de createQuery() métodos :

    Query createQuery(java.lang.String queryString )

    Crear una instancia de Consulta para el HQL/JPQL de la cadena de consulta.

    <R> Query<R> createQuery(java.lang.String queryString,
                             java.lang.Class<R> resultClass)

    Crear un tipo de instancia de Consulta para el HQL/JPQL de la cadena de consulta.

    En su caso se utiliza la primera Query y list() es el método @deperecated.

    Puede el usuario getResultList() en lugar de list() para Varios resultados :

    List<Object> loadAllAdmins() {
        List<Object> allAdmins = new ArrayList<Object>();
            try {
           HibernateUtil.beginTransaction();
    
           allAdmins= List<Object> currentSession.createQuery("SELECT admin.firstName, admin.lastName from AdminBean admin").getResultList();
    
    
                            HibernateUtil.commitTransaction();
                    } catch (HibernateException ex) {
                            System.out.println("List<AdminBean> loadAllPersons: HibernateException");
                    }
                    return allAdmins;
            }

    Para un solo resultado puede utilizar getSingleResult() :

           Admin= (Object) currentSession.createQuery("SELECT admin.firstName, admin.lastName from AdminBean admin").getSingleResult();

    PS: he utilizado Object basado en su tipo de Object ,se puede convertir el resultado según el tipo de uso.

    OriginalEl autor Menai Ala Eddine

  5. 0

    Aunque tarde a la fiesta, pero puede ser vale la pena destacar la sobrecarga createQuery (método de evitar las advertencias en total):

    public List<Admin> loadAllAdmins() {
        try {
            HibernateUtil.beginTransaction();
            List<Admin> admins = currentSession.createQuery("SELECT admin.firstName, admin.lastName from AdminBean admin", Admin.class).getResultList();
            HibernateUtil.commitTransaction();
            return admins;
        } catch (HibernateException ex) {
            System.out.println("List<AdminBean> loadAllPersons: HibernateException");
            return new ArrayList<>();
        }
    }

    OriginalEl autor sharmaap

Dejar respuesta

Please enter your comment!
Please enter your name here