Hibernate和MYSQL实现更新数据问题!?

yaocanz 2008-05-30 10:51:07
部份代码如下:执行在ECLIPSE的控制台里显示结果是更新啦,但我到数据库里看却没有变!
但插入数据和查询数据都没问题!请各位达人,赐教!多谢!

public class HibernateTest {
public static void main(String[] args) throws HibernateException
{
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();

List users = session.find("from User");
// 关闭这个Session
session.close();

User updated = null;

for (ListIterator iterator = users.listIterator(); iterator.hasNext(); )
{
User user = (User) iterator.next();

if(updated == null)
updated = user;

System.out.println(user.getName() +
"\n\tAge: " + user.getAge() +
"\n\tSex: " + user.getSex());
}

// 使用者作一些操作,之后储存

updated.setName("volcano");

// 开启一个新的Session
session = sessionFactory.openSession();
// 更新数据
//session.update(updated);
session.saveOrUpdate(updated);
users = session.find("from User");
session.close();
sessionFactory.close();

for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) {
User user = (User) iterator.next();
System.out.println(user.getName() +
"\n\tAge: " + user.getAge() +
"\n\tSex: " + user.getSex());
}
}
}

...全文
202 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaocanz 2008-05-31
  • 打赏
  • 举报
回复
给啦,一个23一个7分啊!你在看看!
favorite7w 2008-05-30
  • 打赏
  • 举报
回复
我说的是数据库表的类型,一般是在创建数据库脚本里写的:

CREATE TABLE User (
id BIGINT UNSIGNED not null unique,间表示 */
name varchar(256) not null ,
pwd varchar(128) not null ,
primary key(id)
) character set gb2312 type = innodb;
yaocanz 2008-05-30
  • 打赏
  • 举报
回复
xml文件改了,还是一样的结果!
而且类型只有any - 总是储存
 none - 总是更新
 null - id为null时储存(预设)
 valid - id为null或是指定值时储存四种吧!?
favorite7w 2008-05-30
  • 打赏
  • 举报
回复
把数据库表的类型设为innodb试一下?
yaocanz 2008-05-30
  • 打赏
  • 举报
回复
我是先修改后,在用循环查出改变后的结果!结果是显示变更成功啦!
burningice44 2008-05-30
  • 打赏
  • 举报
回复
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); )


你这需要都修改吗,为什么还用循环呢
zhaoyongling721 2008-05-30
  • 打赏
  • 举报
回复
貌似lz只问问题不散分阿
yaocanz 2008-05-30
  • 打赏
  • 举报
回复
中,结贴!
favorite7w 2008-05-30
  • 打赏
  • 举报
回复
网上摘抄:

(1):事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
(2):事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。
(3):事务运行的三种模式:
A:自动提交事务
每条单独的语句都是一个事务。每个语句后都隐含一个COMMIT。
B:显式事务
以BEGIN TRANSACTION显式开始,以COMMIT或ROLLBACK显式结束。
C:隐性事务
在前一个事务完成时,新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK显式结束。
(4):事务的特性(ACID特性)
A:原子性(Atomicity)
事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
B:一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
C:隔离性(Isolation)
一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability)
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
注:事务是恢复和并发控制的基本单位。
((1)是回答事务的概念到底是什么——即你的提问,至于(2)、(3)、(4)只是作的稍许补充而已,不必深究,呵呵……)
yaocanz 2008-05-30
  • 打赏
  • 举报
回复
可以啦,太感谢啦!真的很强大!但能说下什么是事务吗!?
zhaoyongling721 2008-05-30
  • 打赏
  • 举报
回复
你没有配事务

// 开启一个新的Session
session = sessionFactory.openSession();
org.hibernate.Transaction tx = session.beginTransaction();

// 更新数据
session.saveOrUpdate(updated);
users = session.find("from User");

tx.commit();
session.flush();
session.close();
sessionFactory.close();

favorite7w 2008-05-30
  • 打赏
  • 举报
回复
噢... 忘了说一点,你没用事务,用事务试一试。
yaocanz 2008-05-30
  • 打赏
  • 举报
回复
Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_
yaocanz
Age: 23
Sex: m

Hibernate: update USER set name=?, sex=?, age=? where user_id=?
Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_
tiger
Age: 23
Sex: m
这是执行后ECLIPSE控制台的结果!但数据库里还是还来的值!
重启数据库也不行!?
yaocanz 2008-05-30
  • 打赏
  • 举报
回复
嗯!我重建了这个表按你的方法,但还是不能实现!请指教!?还需要什么资料您说!?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧