hibernate 中如何使用 update 和 delete

03-08-06 newpaul
我想更新所有 person 中的 address 字段

Session sess = sessionFactory.openSession();

Transaction t = sess.beginTransaction();

String queryString = "select person from Person as person";

Query query = sess.createQuery(queryString);

for(Iterator it=query.iterate();it.hasNext();){

ps=(Person)it.next();

ps.setAddress("updateAddress");

sess.update(ps);

//System.out.println("ID: " + ps.getId() + ", NAME:" + ps.getName() + ", 地址:" + ps.getAddress());

}

t.commit();

sess.close();

newpaul
2003-08-06 13:32
但是这样报错

net.sf.hibernate.HibernateException: Session is currently disconnected

at net.sf.hibernate.impl.SessionImpl.connection(SessionImpl.java:2755)

at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:58)

at TestCompany.vast(TestCompany.java:214)

at TestCompany.main(TestCompany.java:240)

Exception in thread "main"

这是为什么啊? update 和 delete 怎么操作阿

yehs220
2003-08-06 14:56
一般来说update()是不需要你调用的,除非一个对象在上一个session

中取得,然后做了一些修改,再在另一个session中更新到数据库时才

需要用到,而在本session中修改的数据在你调用tx.commit()时会自动同步到数据库。

newpaul
2003-08-06 15:48
恩 我改用session.flush 就可以更新了

Iterator iter = sess.iterate("select person from Person as person");

while(iter.hasNext()){

ps=(Person)iter.next();

ps.setAddress("test");

sess.flush();

}

我是想测试一下hibernate的性能 用了100000条数据 但是hibernate这样更新好慢阿 还是我的方法不对吗?

yehs220
2003-08-06 15:55
好像没必要每次都flush吧。

这样一条条更新肯定慢了,好像没什么好办法了。

yehs220
2003-08-06 15:57
可以取得jdbc connection,写sql来update,这样快!

newpaul
2003-08-06 16:01
对阿 我用jdbc sql 这样成批的更新很快 但用sql 这样一条一条这样更新的话那一定也很慢的

hibernate query为何没有updare delete 的操作呢?

newpaul
2003-08-06 16:04
yehs220 能不能留个网上的联系方式,最近在学习hibernate 看了他的文档 我的msn ; paul.hua@akup.com qq:10298365

猜你喜欢