浏览 5572 次
锁定老帖子 主题:数据插入的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2003-11-05
Configuration cfg = new Configuration();.addClass(TabSysTitle.class);; SessionFactory sessions = cfg.buildSessionFactory();; Session session = sessions.openSession();; TabSysTitle title = new TabSysTitle();; title.setTITLE_ID(10);; title.setNAME("abc");; title.setDESCRIPTION("abc is a programmer");; title.setTITLE_ORDER(10);; Long generateId = (Long);session.save(title);; session.save(title);; session.flush();; long pkId = 10; TabSysTitle pk = (TabSysTitle);session.load(TabSysTitle.class, new Long(pkId););; session.close();; System.out.println(pk.getDESCRIPTION(););; 上面是我的代码,运行都正常。先将数据插入数据库,再根据pkID去找到这条记录打出descripiton的值!最后打出的值是“abc is a programmer” 可是数据库里没这条记录,奇怪了。是不是我代码里哪里没有提交啊?大家帮我看看,谢谢了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2003-11-05
都没有保存到数据库里,但是后面的查询代码能够查找到。好像似乎插入的数据在缓存里没有到数据库里去,奇怪的很,是我哪里有错误嘛?再帮我看看,谢谢!
|
|
返回顶楼 | |
发表时间:2003-11-05
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="com.entity.TabSysTitle" table="TAB_SYS_TITLE" dynamic-insert="true" dynamic-update="true"> <id name="TITLE_ID" column="TITLE_ID" type="long" length="22"> <generator class="increment"/> </id> <property name="NAME" column="NAME" type="string" length="50"/> <property name="DESCRIPTION" column="DESCRIPTION" type="string" length="200" not-null="true"/> <property name="TITLE_ORDER" column="TITLE_ORDER" type="long" length="22"/> </class> </hibernate-mapping> |
|
返回顶楼 | |
发表时间:2003-11-05
提交的语句是什么?
session.flush()这句话不是提交的语法吗? |
|
返回顶楼 | |
发表时间:2003-11-05
用你说的方法能成功的插入,十分感谢你的帮助!我看文档里说flush是提交操作的,也很疑惑!需要进一步的搞清楚为好,我是刚学Hibernate的,经常讨论讨论吧
|
|
返回顶楼 | |
发表时间:2003-11-05
17193941
|
|
返回顶楼 | |
发表时间:2003-11-05
Hibernate会尽量延迟向数据库发送SQL语句,就算你用session.update,session.save等操作,Hibernate不会执行任何实际的数据库读写操作,直到你flush的时候,Hibernate才会把SQL发送给数据库。对于一个支持事务功能的数据库来说,光发送SQL,但是不commit,数据库不会把数据修改写到硬盘。而session.commit会自动调用一次flush,保证Hibernate的Session中的SQL缓冲区的sql语句都发送到数据库,然后提交事务。
|
|
返回顶楼 | |
发表时间:2003-11-06
yoshiyan 写道 不用事务的话,这样写也行 将事务有关的句子去掉, session.connecion.commit(); 没用的,还是不会插入到数据库去的。 |
|
返回顶楼 | |
发表时间:2003-11-07
robbin 写道 而session.commit会自动调用一次flush,保证Hibernate的Session中的SQL缓冲区的sql语句都发送到数据库,然后提交事务。
我的理解和robbin有偏差: ·缺省情况下,session.close()会自动session.flush(),但不提交 ·缺省情况下,session.connection().commit()不会自动session.flush() ·没有“session.commit” 参见net.sf.hibernate.FlushMode的API |
|
返回顶楼 | |
发表时间:2003-11-07
muziq 写道 robbin 写道 而session.commit会自动调用一次flush,保证Hibernate的Session中的SQL缓冲区的sql语句都发送到数据库,然后提交事务。
我的理解和robbin有偏差: ·缺省情况下,session.close()会自动session.flush(),但不提交 ·缺省情况下,session.connection().commit()不会自动session.flush() ·没有“session.commit” 参见net.sf.hibernate.FlushMode的API 1、是的 2、是的 3、我敲错了,是Transaction.commit |
|
返回顶楼 | |