Liny_@NotePad

沉迷ACG中

Hibernate 修改复合主键中的字段

YOYO posted @ 2009年8月12日 22:49 in 【Java EE】 with tags Hibernate 复合主键 SQL Update , 4859 阅读

由于设计的时候没有考虑到可能变化其中的内容,于是设成复合主键,
现在需要对其中某字段进行修改,但是用Hibernate的方法始终更新不了,囧,最后就直接用SQL写了。

Hibernate使用SQL的写法是:session.createSQLQuery(sql).executeUpdate()
在使用中一直报错:java.lang.UnsupportedOperationException: Update queries only supported through HQL
囧了,你不能用SQL你干嘛还叫SQLQuery……

之后百度到……Hibernate3.2以上的版本中才支持,
仔细一看工程的jar包是3.1的,于是丢了换了个3.2的再跑,运行成功~

最后这个是具体实现的代码 囧:

  1.         /**
  2.          * 更改分类
  3.          * @param sort
  4.          * @param newCategoryID
  5.          * @return
  6.          */
  7.         public boolean updateSortCategory(InstrumentSort sort, String newCategoryID) {
  8.                 String sql = "UPDATE instrumentsort SET categoryID = :NewCategoryID" +
  9.                                         " WHERE categoryID = :OldCategoryID" +
  10.                                         " AND sortID = :SortID";
  11.                 Session session = (Session) HibernateSessionFactory.getSession();
  12.                 Transaction transaction = session.beginTransaction();
  13.                 transaction.begin();
  14.                 int result = session.createSQLQuery(sql)
  15.                                         .setString("NewCategoryID", newCategoryID)
  16.                                         .setString("OldCategoryID", sort.getInstrumentCategory().getCategoryId())
  17.                                         .setString("SortID",  sort.getSortId())
  18.                                         .executeUpdate();
  19.                 session.flush();
  20.                 transaction.commit();
  21.                 session.close();
  22.                 return result == 0;
  23.         }

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter