今天在MySQL中用hibernate测试update语句发现以下问题:

update语句竟然不去作用;

表机构如下:

create table student
(sid int primary key ,
sname varchar(45) not null,
ssex char(2) not null,
sdept varchar(10) not null,
sage int ,
saddress varchar(45)
);

update语句如下:

String[] params = new String[] { "20", "成龙" };

HibernateUtil.executeUpdate(
"update Student s set s.sage=? where s.sname=?",params);

package com.huml.util;

import java.util.ArrayList;
import java.util.Arrays; import org.hibernate.Transaction; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static final SessionFactory sf;
private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
static {
sf = new Configuration().configure().buildSessionFactory();
} private HibernateUtil() { } public static Session openSession() {
return sf.openSession();
} public static Session getcurrentSession() {
Session session = threadLocal.get(); if (session == null) {
session = sf.openSession();
threadLocal.set(session);
}
return session;
} public static void save(Object obj) {
Session session = openSession();
Transaction tx = null; try {
tx = session.beginTransaction();
session.save(obj);
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
throw new RuntimeException(e.getMessage());
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
} @SuppressWarnings("unchecked")
public static ArrayList executeQuery(String hql, String... params) {
Session session = openSession();
Transaction tx = null;
ArrayList list = null;
try {
tx = session.beginTransaction();
Query query = session.createQuery(hql); if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
list = (ArrayList) query.list();
tx.commit();
} catch (Exception e) {
if (tx != null)
tx.rollback();
throw new RuntimeException(e.getMessage());
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
return list;
} public static void executeUpdate(String hql, String... params) { Session session = openSession();
Transaction tx = null; try {
tx = session.beginTransaction();
Query query = session.createQuery(hql); if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
// System.out.println("query influenced: "+params[i]);
}
}
System.out.println("query influenced: " + query.getQueryString());
int n = query.executeUpdate();
System.out.println("query influence: " + n);
tx.commit();
} catch (Exception e) {
if (tx != null)
tx.rollback();
throw new RuntimeException(e.getMessage());
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
} }

原因是MySQL中不能自动把String类型转换成Integer,在Oracle中可以修改代码如下:

Object[] params = new Object[] { 20, "成龙" };

HibernateUtil.executeUpdate(
"update Student s set s.sage=? where s.sname=?",params);

package com.huml.util;

import java.util.ArrayList;
import java.util.Arrays; import org.hibernate.Transaction; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static final SessionFactory sf;
private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
static {
sf = new Configuration().configure().buildSessionFactory();
} private HibernateUtil() { } public static Session openSession() {
return sf.openSession();
} public static Session getcurrentSession() {
Session session = threadLocal.get(); if (session == null) {
session = sf.openSession();
threadLocal.set(session);
}
return session;
} public static void save(Object obj) {
Session session = openSession();
Transaction tx = null; try {
tx = session.beginTransaction();
session.save(obj);
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
throw new RuntimeException(e.getMessage());
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
} @SuppressWarnings("unchecked")
public static ArrayList executeQuery(String hql, String... params) {
Session session = openSession();
Transaction tx = null;
ArrayList list = null;
try {
tx = session.beginTransaction();
Query query = session.createQuery(hql); if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
list = (ArrayList) query.list();
tx.commit();
} catch (Exception e) {
if (tx != null)
tx.rollback();
throw new RuntimeException(e.getMessage());
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
return list;
} public static void executeUpdate(String hql, Object... params) { Session session = openSession();
Transaction tx = null; try {
tx = session.beginTransaction();
Query query = session.createQuery(hql); if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
// System.out.println("query influenced: "+params[i]);
}
}
System.out.println("query influenced: " + query.getQueryString());
int n = query.executeUpdate();
System.out.println("query influence: " + n);
tx.commit();
} catch (Exception e) {
if (tx != null)
tx.rollback();
throw new RuntimeException(e.getMessage());
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
}

这样就成功了;

Hibernate 中update hql语句的更多相关文章

  1. 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用

    概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...

  2. hibernate中使用sql语句进行表链接查询,对结果集的遍历方法

    今天做了一个在hibernate中使用sql语句进行表链接查询的功能,得到的属性是来自两个表中的字段.下面对结果集遍历的方法进行记录. sql语句不写了.部分代码如下: List<Course_ ...

  3. Hibernate中关于HQL查询返回List<Object>数据的结果集问题

    ---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...

  4. JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法

    本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...

  5. JavaWeb_(Hibernate框架)Hibernate中数据查询语句HQL基本用法

    HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. ...

  6. 使用SQLQuery 在Hibernate中使用sql语句

    对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar q ...

  7. Hibernate中的HQL语言

    一.HQL语言简介 HQL全称是Hibernate Query Language,它提供了是十分强大的功能,它是针对持久化对象,直接取得对象,而不进行update,delete和insert等操作.而 ...

  8. Hibernate中的HQL查询与缓存机制

    HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...

  9. hibernate中的sql语句

    hibernate的hql查询语句总结   在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Classroom与Stud ...

随机推荐

  1. HDU 5593 ZYB's Tree 树形dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5593 题意: http://bestcoder.hdu.edu.cn/contests/contes ...

  2. 【Lua】Lua中__index与元表(转)

    转载于:http://blog.csdn.net/xocoder/article/details/9028347 Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Value对,如 ...

  3. 【BZOJ】【3163】【HEOI2013】Eden的新背包问题

    多重背包/思路题 多次询问,每次从所有物品中忽略一件,问最大收益…… 这题我用的zyf的一个“暴力”做法,就是先预处理出来g1[i][j]表示1~i号物品花了j块钱的最大价值,g2[i][j]表示i~ ...

  4. 【BZOJ】【1049】【HAOI2006】数字序列

    DP 第一问比较水……a[i]-=i 以后就变成最长不下降子序列问题了,第二问这个结论好神奇,考试的时候怎么破?大胆猜想,不用证明?TAT 题解:http://pan.baidu.com/share/ ...

  5. linux命令集——<一>目录处理命令

    1.ls,命令,显示当前目录下文件 命令 所在路径 功能描述 执行权限 选项 说明 ls /bin/ls 显示目录文件 所有用户可用 -a 显示所有文件,包括隐藏文件         -l 显示详细信 ...

  6. vitrualbox虚拟机64位安装报错解决

    1 NtCreateFile(\Device\VBoxDrvStub) failed: 0xc0000034 STATUS_OBJECT_NAME_NOT_FOUND (0 retries) 解决办法 ...

  7. cts 测试环境安装 ubuntu

    1 下载cts测试包 和 sdk 包 http://source.android.com/compatibility/downloads.html  ----cts 包 http://develope ...

  8. 说说php取余运算(%)的那点事

    http://www.phpddt.com/php/php-take-over.html       fmod()与 % 区别   都是取余 fmod是函数 原型float fmod(float x, ...

  9. Sqli-labs less 52

    Less-52 和less50是一样的,只是这里的mysql错误不会在前台显示,但是对于stacked injection是一样的利用方式 http://127.0.0.1/sqli-labs/Les ...

  10. 移动平台WEB前端开发技巧汇总

    原文 :http://uecss.com/mobile-platform-web-front-end-development-skills-summary.html 开发者们都知道在高端智能手机系统中 ...