Hibernate 中update hql语句
今天在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语句的更多相关文章
- 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用
概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...
- hibernate中使用sql语句进行表链接查询,对结果集的遍历方法
今天做了一个在hibernate中使用sql语句进行表链接查询的功能,得到的属性是来自两个表中的字段.下面对结果集遍历的方法进行记录. sql语句不写了.部分代码如下: List<Course_ ...
- Hibernate中关于HQL查询返回List<Object>数据的结果集问题
---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法
本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句HQL基本用法
HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. ...
- 使用SQLQuery 在Hibernate中使用sql语句
对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar q ...
- Hibernate中的HQL语言
一.HQL语言简介 HQL全称是Hibernate Query Language,它提供了是十分强大的功能,它是针对持久化对象,直接取得对象,而不进行update,delete和insert等操作.而 ...
- Hibernate中的HQL查询与缓存机制
HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...
- hibernate中的sql语句
hibernate的hql查询语句总结 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Classroom与Stud ...
随机推荐
- Vim配置文件(Vimrc)
嘛……后面的比赛基本都是在NOI Linux下进行了,windows下的开发环境基本都不能用了>_>果断转了vim,记录一下vim的配置文件- set nu syntax on filet ...
- [转载]115个Java面试题和答案
不知道大家有没有这样的体会,就是找工作的时候不得不准备大量面试题,而工作的时间长了面试题里的精髓却忘的差不多了... 转载几篇Java面试的bolg,温故而知新,最重要的是常来看看. 1. http: ...
- struct {0}初始化
#include <iostream> struct MyStruct { MyStruct(int a) { a = b = ; } int a; int b; }; int main( ...
- string为什么可以写入共享内存
我今天在想这个vector,map为什么不能写入共享内存,原来是因为new的时候只是new了这个对象在共享内存上,而真正的堆上的内存并没有在共享内存里面的,如果要想vector 可以共享就要重写分配器 ...
- 发布windows phone应用经历实谈
经过这一次艰辛的发布应用的过程,看来果然这不是个简单的过程,不过经历过了一次之后感觉其实也没这么难,下面我将介绍我通过学生账号发布windows phone 8的应用到商店的全过程,其实整个过程最为困 ...
- VSS
A deleted file of the same name already exists in this VSS project. Do you want to recover the delet ...
- 小圣求职记B:总集篇
1. 搜狐sohu 搜狐在正式招聘前邀请了部分应聘者到武汉研发中心开座谈会(因此简历尽量早投,机会多些),有研发的也有产品的,40人左右,座谈会期间介绍了搜狐汽车.北京研发中心.武汉研发中心和搜狐媒体 ...
- FastDfs点滴
1.centos安装后提示找不到libevent动态库 根据系统是64位版本还是32位版本,若是64位版本则默认回到 /usr/lib64 目录下查找,而对于32位则到 /usr/lib 目录下查找. ...
- LoaderManager使用详解(四)---实例:AppListLoader
实例:AppListLoader 这篇文章将是我的第四篇,也就是最后一篇该系列的文章.请在评论里面告诉我他们是否有用.前面几篇文章的链接如下: 一:Loaders之前世界 二:了解Loader ...
- Linux下进程通信的八种方法
Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...