今天在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 4858 项目管理 图的分块

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能 ...

  2. java 验证身份证号

  3. 【bzoj1005】[HNOI2008]明明的烦恼

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4175  Solved: 1660[Submit][Stat ...

  4. WPF编程学习——布局

    本文目录 1.布局简介 2.面板(Panel) 3.视图框(Viewbox) 4.滚动视图控件(ScrollViewer) 5.公共布局属性 1.布局简介 应用程序界面设计中,合理的元素布局至关重要, ...

  5. YARN-RPC

    运行在YARN平台上面的RPC. 当前存在非常多的开源RPC框架,比较著名的有Thrift.Protocol Buffers 和 AVRO.他们均有两部分构成:对象序列化和远程过程调用. 重要类: Y ...

  6. 关于trello的分享

    https://www.the5fire.com/trello-share.html 昨天在公司跟同事分享了关于trello的使用,这里也分享给大家.比较简单,重点是让你知道有这么个东西.tangle ...

  7. iOS音效

    //AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到系统声音服务(System Sound Service) //System Sound S ...

  8. Vi的使用

    Vi的使用: 范例一: 使用Vi进入一般模式: [root@dsetl lp]# vi test1.txt 范例二:按下i键进入编辑模式,开始编辑文字 -- INSERT – 范例三:按下[ESC]键 ...

  9. 自动化 测试框架部署(python3+selenium2)

    安装Python 从https://www.python.org/downloads/下载最新版本的Python3,请注意,是3: 需要将Python的安装目录和安装目录下的Scripts文件夹添加到 ...

  10. IE9 JSON未定义

    原文:http://social.msdn.microsoft.com/Forums/ie/en-US/fc41127c-0243-4d2e-8e7c-2b311f12e390/ie9-json-no ...