Hibernate 修改复合主键中的字段
由于设计的时候没有考虑到可能变化其中的内容,于是设成复合主键,
现在需要对其中某字段进行修改,但是用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的再跑,运行成功~
最后这个是具体实现的代码 囧:
-
/**
-
* 更改分类
-
* @param sort
-
* @param newCategoryID
-
* @return
-
*/
-
String sql = "UPDATE instrumentsort SET categoryID = :NewCategoryID" +
-
" WHERE categoryID = :OldCategoryID" +
-
" AND sortID = :SortID";
-
Session session = (Session) HibernateSessionFactory.getSession();
-
Transaction transaction = session.beginTransaction();
-
transaction.begin();
-
int result = session.createSQLQuery(sql)
-
.setString("NewCategoryID", newCategoryID)
-
.setString("OldCategoryID", sort.getInstrumentCategory().getCategoryId())
-
.setString("SortID", sort.getSortId())
-
.executeUpdate();
-
session.flush();
-
transaction.commit();
-
session.close();
-
return result == 0;
-
}