Как обновить таблицу в java с помощью hibernate без использования hql и sql

Я много пробовал обновлять свою таблицу с помощью hql, но я не нашел решение, я тоже искал в Интернете, я новичок в java и hibernate, помогите мне найти решение.

мой код написан ниже.

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

но я получил следующую ошибку.

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)

Ответ 1

Если вы используете спящий режим, вы должны попытаться получить доступ к объектам без таблиц.
Самое большое преимущество спящего режима заключается в том, что он предоставляет вам ORM (реляционное сопоставление объектов).
Ниже приведен пример обновления сущности с помощью спящего режима (конечно, соответствующая таблица также обновляется).

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

Ответ 2

Вы создаете собственный (SQL) запрос, используя createQuery() вместо метода createSQLQuery() поэтому просто измените свой код следующим образом

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

Подробнее об этом читайте:

Ответ 3

Для обновления объекта без SQL или HQL вы можете использовать следующий фрагмент кода.

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

Прочитайте документацию об обновлении - возможно, вам придется использовать merge или saveOrUpdate.

Ответ 4

Вот способ обновления данных в таблицу с использованием 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;
}

Ответ 5

вы можете использовать слияние спящего режима. таких как

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

Я надеюсь, что может вам помочь;