Liny_@NotePad

沉迷ACG中

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的再跑,运行成功~

Spring+Hibernate查询复合主键报错

原本在C/S项目中的测试通过,但是在转换到B/S的时候就报错了,

复合主键的查询代码是

  1.          /**
  2.          * 获得指定编号的种别
  3.          * @param sortID
  4.          * @param category
  5.          * @return
  6.          */
  7.         public InstrumentSort getSortById(String sortID, InstrumentCategory category) {
  8.                 InstrumentSort sort = new InstrumentSort();
  9.                 sort.setSortId(sortID);
  10.                 sort.setInstrumentCategory(category);
  11.                 return (InstrumentSort) this.getHibernateTemplate().getSessionFactory().getCurrentSession().load(InstrumentSort.class, sort);   
  12.         }

其中sortID和category是InstrumentSort的主键。

报的错误是org.hibernate.LazyInitializationException: could not initialize proxy - no Session

于是在InstrumentSort.hbm.xml的<hibernate-mapping>里加上了 default-lazy="false" 属性 就成功了 囧rz 原因为啥不知