web-dev-qa-db-fra.com

comment mettre à jour la table en Java en utilisant hibernate sans utiliser hql et sql

J'ai beaucoup essayé de mettre à jour ma table en utilisant hql mais je n'ai pas trouvé la solution, j'ai aussi cherché sur internet, je suis nouveau en Java et hibernate s'il vous plaît aidez-moi à trouver la solution .

mon code est écrit ci-dessous.

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();

mais j'ai eu l'erreur suivante.

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)
11
user3205372

Si vous utilisez hibernate, vous devez essayer d'accéder aux entités et non aux tables.
Le plus grand avantage de la mise en veille prolongée est qu'elle vous fournit ORM (mapping relationnel objet).
Voici l'exemple de mise à jour d'une entité avec hibernate
(bien sûr, le tableau correspondant est également mis à jour).

/* 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(); 
      }
   }
18
faisalbhagat

Vous créez une requête native (SQL) à l'aide de la méthode createQuery() au lieu de la méthode createSQLQuery() alors changez simplement votre code comme suit

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();

lire à ce sujet en détail:

14
Ashish Jagtap

Pour mettre à jour un objet sans SQL ou HQL, vous pouvez utiliser l'extrait de code suivant.

 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();
 }

Lisez la documentation sur pdate - possible, vous devez utiliser merge ou saveOrUpdate .

5
Divers

Voici un moyen de mettre à jour les données dans une table en utilisant 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 = :uname, uemail = :uemail, uphone = :uphone WHERE uemail = :uemail";

Query query = session.createQuery(hql);
query.setParameter("uname", uname);
query.setParameter("uemail", uemail);
query.setParameter("uphone", uphone);
int rr = query.executeUpdate();

t.commit();

if (rr != 0) {
    return true;
} else {
    return true;
}
2
Roopa Veriton