今天在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. URL编码方法比较

    javascript中存在几种对URL字符串进行编码的方法:escape(),encodeURI(),以及encodeURIComponent().这几种编码所起的作用各不相同. escape() 方 ...

  2. SQL TRY CATCH

    begin try select 1/0end trybegin catch select error_number() as 'number', error_line() as 'line', er ...

  3. 如何做好一名DBA【转】

    我一直有一个观点:程序是暂时的,而数据是永恒的.所以我一直都认为数据的重要性在很多企业中都远远高于应用程序,在多年的工作实践中努力做好DBA的工作.而要做好一名DBA,必须要清楚作为一名DBA的职责. ...

  4. virtualenv 环境下 Nginx + Flask + Gunicorn+ Supervisor 搭建 Python Web

    在这篇文章里,我们将搭建一个简单的 Web 应用,在虚拟环境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程,然后使用 Python 探针来监测应 ...

  5. iOS第三方语音-讯飞语音

    官方网站:http://www.xfyun.cn/ 注册还要绑定微信,坑啊,识别率感觉没得微信语音好,但是微信语音审核一直不过,研究下这个 1.下载sdk,主要就下面几个文件,我主要用的是语音识别

  6. iOS获取手机相关信息

    iOS具体的设备型号: #include <sys/types.h> #include <sys/sysctl.h> - (void)test { //手机型号. size_t ...

  7. Java加密技术

    相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法  ...

  8. uva 12589 - Learning Vector

    思路: 容易知道加向量的顺序是按向量斜率的大小顺序来的.由于数据不是很大,可以用背包解决!! dp[i][j]:加入最大面积为i时,加入了j个向量. 代码如下: #include<iostrea ...

  9. Android Activity 阻止软键盘自动弹出

    在AndroidManifest.xml里面 选择那个acitivity, 把他的window soft input mode设置成stateHidden和 adjustUnspecified < ...

  10. Linux inotify功能及实现原理

    http://www.cnblogs.com/jiejnan/archive/2012/05/18/2507476.html 简介: 当需要对 Linux®文件系统进行高效率.细粒度.异步地监控时,可 ...