[英]How come hibernate executes update sql statements when I do a read using HQL on the same object/table?
[英]how to update the table in java using hibernate without using hql and 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)
如果您正在使用休眠,則應嘗試訪問實體而不是表。
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()
方法創建本機(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();
詳細了解這個:
createQuery和createSQLQuery之間的區別
希望這能解決你的問題
要更新沒有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 。
這里有一種使用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;
}
你可以使用hibernate session的合並。 如
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"
我希望可以幫助你;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.