He probado un montón de actualizar mi tabla con hql pero no he encontrado la solución , he buscado en la red de internet, soy nuevo en java y de hibernación, por favor, ayúdame a encontrar la solución.

mi código está escrito a continuación.

session.getTransaction().begin();
Query query = session.createQuery("update DocDetail set DocName = :docname" + 
    " where Id = :docId");
query.setParameter("docname", "Jack");
query.setParameter("docId", 3);
int result = query.executeUpdate();
session.getTransaction().commit();

pero tengo el siguiente error.

Exception in thread "AWT-EventQueue-0" org.hibernate.QueryException: query must begin with SELECT or FROM: update [update clinic.entity.DocDetail set DocName = :studentName where Id = :studentId]
at org.hibernate.hql.classic.ClauseParser.token(ClauseParser.java:106)
at org.hibernate.hql.classic.PreprocessingParser.token(PreprocessingParser.java:131)
at org.hibernate.hql.classic.ParserHelper.parse(ParserHelper.java:51)

OriginalEl autor user3205372 | 2014-01-21

5 Comentarios

  1. 16

    Si usted está usando hibernate, usted debe tratar de acceso a entidades sin tablas.

    La mayor ventaja de hibernate es que se le proporciona un ORM (object relational mapping).

    Aquí está el ejemplo de cómo actualizar una entidad con hibernate

    (por supuesto, correspondiente de la tabla también se actualiza).

    /* Method to UPDATE salary for an employee */
       public void updateEmployee(Integer EmployeeID, int salary ){
          Session session = factory.openSession();
          Transaction tx = null;
          try{
             tx = session.beginTransaction();
             Employee employee = 
                        (Employee)session.get(Employee.class, EmployeeID); 
             employee.setSalary( salary );
             session.update(employee); 
             tx.commit();
          }catch (HibernateException e) {
             if (tx!=null) tx.rollback();
             e.printStackTrace(); 
          }finally {
             session.close(); 
          }
       }
    ¿Por qué es una transacción que se requiere aquí?
    generalmente u hacer las actualizaciones en los límites de la transacción. sin embargo, usted puede quitar transacciones relacionadas con el código. si está seguro de que usted no lo necesita.

    OriginalEl autor faisalbhagat

  2. 14

    Está creando un Nativo(SQL) consulta mediante createQuery() método en lugar de createSQLQuery() método, así que cambie el código de la siguiente manera

    session.getTransaction().begin();
    Query query = session.createSQLQuery(
        "update DocDetail set DocName = :docname" + " where Id = :docId");
    query.setParameter("docname", "Jack");
    query.setParameter("docId", 3);
    int result = query.executeUpdate();
    session.getTransaction().commit();

    leer acerca de esto en detalle:

    OriginalEl autor Ashish Jagtap

  3. 5

    createQuery es para la Selección, como se puede leer en la excepción.
    Para actualizar el objeto sin SQL o HQL puede utilizar el siguiente fragmento de código.

     Session sess = factory.openSession();
     Transaction tx;
     try {
         tx = sess.beginTransaction();
         sess.update(yourObject);
         tx.commit();
     }
     catch (Exception e) {
         if (tx!=null) tx.rollback();
         throw e;
     }
     finally {
         sess.close();
     }

    Lea la documentación acerca de actualizar – es posible que usted tenga que utilizar combinación de o saveOrUpdate.

    createQuery es para la creación de consultas. Se llama executeUpdate por una razón.
    Incluso puede que no de la imagen que ‘createQuery’ es para la creación de consultas! Gracias!
    La respuesta no tiene derecho a obtener mediante la adición de sarcasmo.
    Falso, createQuery no es sólo para la selección. Puede ejecutar las actualizaciones y eliminaciones. En SQL jerga cualquier operación DML es una Consulta.

    OriginalEl autor Divers

  4. 2

    Aquí una forma de actualizar datos en una tabla usando hibernate hql:

    Configuration cfg = new Configuration();
    cfg.configure("HibernateService/hibernate.cfg.xml");
    
    SessionFactory factory = cfg.buildSessionFactory();
    Session session = factory.openSession();
    Transaction t = session.beginTransaction();
    
    String hql = "update Userreg set uname='" + user.getUname() + "',uemail='" + user.getUemail() + "'  , uphone='" + user.getUphone() + "' where uemail='" + user.getEmail() + "'";
    
    Query query = session.createQuery(hql);
    int rr = query.executeUpdate();
    
    t.commit();
    
    if (rr != 0) {
        return true;
    } else {
        return true;
    }
    Código anterior para la actualización de los datos en una tabla usando hibernate se ha trabajado correctamente
    tu comentario debe ser añadido en su respuesta. Para que otros usuarios tendrán alguna idea de lo qué es y por qué existe.

    OriginalEl autor Roopa Veriton

  5. -1

    usted puede usar el modo de hibernación de la sesión de mezcla.
    como

    User user = session.find("1"); 
    //get Persistence entity``String userName = user.getUserName(); // userName = "enzo"
    //user.setUserName("leo");
    session.merge(user);
    //Test entity user's useName
    String userNameNew = session.find("1").getUserName; //now userName is "leo"

    Espero que pueda ayudar a usted;

    OriginalEl autor 罗智博

Dejar respuesta

Please enter your comment!
Please enter your name here