私はhqlを使用してテーブルを更新しようとしましたが、解決策が見つかりませんでした、私もインターネットで検索しました、私はJavaと休止状態で新しいです。
私のコードは以下に書かれています。
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)
休止状態を使用している場合は、テーブルではなくエンティティにアクセスしてみてください。
Hibernateの最大の利点は、ORM(オブジェクトリレーショナルマッピング)を提供することです。
これは、Hibernateでエンティティを更新する方法の例です
(もちろん対応するテーブルも更新されます)。
/* 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();
}
}
createQuery()
メソッドの代わりにcreateSQLQuery()
メソッドを使用してNative(SQL)クエリを作成しているため、コードを次のように変更します。
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();
これについて詳しく読む:
これがあなたの問題を解決することを願っています
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();
}
pdate に関するドキュメントをお読みください- merge または saveOrUpdate を使用する必要がある可能性があります。
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;
}