/**
 * 評価情報更新
 * @param enterId 事業者ID
 * @param evaId 評価ID
 * @param updateDate 評価情報の更新日付
 * @return 評価情報更新結果
 */
public int updateEvaInfo(String enterId, String evaId, String updateDate)
throws DataAccessException {
// 評価情報を更新用HQL文を設定する
String hqlUpdate = " update TblEva as tblEva "
+ "       set tblEva.deleteFlg = :deleteFlg, "
+ "              tblEva.updatetime = :updatetime "
+ "   where tblEva.id.tblEnter.enterId = :enterId "
+ "      and tblEva.id.evaId = :evaId "
+ "      and tblEva.updatetime = :updateDate "; Query query = getSession().createQuery(hqlUpdate);
// HQL文のパラメータを設定する
query.setString("deleteFlg", Constant.DELETEFLAG_DELETED);
query.setTimestamp("updatetime", CommonUtils.getCurrentTime());
query.setString("enterId", enterId);
query.setString("evaId", evaId);
query.setString("updateDate", updateDate);
// 評価情報更新結果を取得する
int updateCount = query.executeUpdate(); // 評価情報更新結果を戻す
return updateCount;
}
可以参考下,你用变量设置不要用数字试试。

解决方案 »

  1.   

    void registerOutParameter(int parameterIndex,
                              int sqlType)
                              throws SQLException
    按顺序位置 parameterIndex 将 OUT 参数注册为 JDBC 类型 sqlType。所有 OUT 参数都必须在执行存储过程前注册。 
    由 sqlType 指定的 OUT 参数的 JDBC 类型确定必须用于 get 方法来读取该参数值的 Java 类型。 如果预期返回给此输出参数的 JDBC 类型是取决于此特定数据库的,则 sqlType 应该是 java.sql.Types.OTHER。方法 getObject(int) 检索该值。 
    出参的注册方法是registerOutParameter
      

  2.   

    顺便给你一个网站另外一种方法:通过XML
    http://hi.baidu.com/beitinsect/blog/item/8c112b261145aa128b82a11d.html
      

  3.   

    谢谢楼上的,楼上的说法是使用JDBC调用存储过程,这样就必须会使用到Connection,但是经过我的测试,我发现session.connection和spring中配置的事务会处于两个事务,这样就与我的需求不一样了,我一直很纳闷为什么会是不同的事务,我并没有配嵌套事务,所以我想绕过jdbc这样的调用存储过程的方法,而直接使用hibernate提供的调用存储过程,看是否还会是两个事务(经过测试,发现仍然是两个事务)
      

  4.   

    我用的是spring+hibernate,在业务层配置了声明式事务,在业务层中某方法内会首先往某张表,假设是A中插入一条记录,然后调用存储过程
    存储过程我是写到一个DAO中的,通过hibernateDaoSupport得到Session,然后在得到connection,然后调用写好的存储过程,存储过程会要等A表中有刚开始插入的记录来执行相应的操作,但是,经过测试,发现A表中确实已经插入了记录,但是在存储过程中看不到已经插入了的数据,这样感觉就是两个事务了,这就是我说的两个事务的意思