论坛首页 Java企业应用论坛

数据插入的问题

浏览 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” 可是数据库里没这条记录,奇怪了。是不是我代码里哪里没有提交啊?大家帮我看看,谢谢了。
   发表时间:2003-11-05  
都没有保存到数据库里,但是后面的查询代码能够查找到。好像似乎插入的数据在缓存里没有到数据库里去,奇怪的很,是我哪里有错误嘛?再帮我看看,谢谢!
0 请登录后投票
   发表时间: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>
0 请登录后投票
   发表时间:2003-11-05  
提交的语句是什么?
session.flush()这句话不是提交的语法吗?
0 请登录后投票
   发表时间:2003-11-05  
用你说的方法能成功的插入,十分感谢你的帮助!我看文档里说flush是提交操作的,也很疑惑!需要进一步的搞清楚为好,我是刚学Hibernate的,经常讨论讨论吧
0 请登录后投票
   发表时间:2003-11-05  
17193941
0 请登录后投票
   发表时间:2003-11-05  
Hibernate会尽量延迟向数据库发送SQL语句,就算你用session.update,session.save等操作,Hibernate不会执行任何实际的数据库读写操作,直到你flush的时候,Hibernate才会把SQL发送给数据库。对于一个支持事务功能的数据库来说,光发送SQL,但是不commit,数据库不会把数据修改写到硬盘。而session.commit会自动调用一次flush,保证Hibernate的Session中的SQL缓冲区的sql语句都发送到数据库,然后提交事务。
0 请登录后投票
   发表时间:2003-11-06  
yoshiyan 写道

不用事务的话,这样写也行
将事务有关的句子去掉,
session.connecion.commit();

没用的,还是不会插入到数据库去的。
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics