问个Hibernate的问题~

koskoswh12 2010-05-26 11:14:49
直接看代码
Session session = HibernateSessionFactory.getSession();
//Transaction tx = session.beginTransaction();
//System.out.println(session.getFlushMode());
WapOperation wapoperation = new WapOperation();
wapoperation.setCode(7l);
wapoperation.setDescription("111122211");
opdao.save(wapoperation);
//opdao.delete(wapoperation);
//tx.commit();

为什么在save的时候不需要事务提交,数据就更新到数据库中了~而update和delete是需要用事务commit后才更新到数据

为什么save不需要?????? 谁能给我解释下~ 有办法让save也需要事务提交后才生效吗?
...全文
174 16 打赏 收藏 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
paullbm 2010-06-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 koskoswh12 的回复:]
找到原因了~~~谢谢大家了~
[/Quote]


把原因告诉大家一下啊!!
koskoswh12 2010-06-01
  • 打赏
  • 举报
回复
找到原因了~~~谢谢大家了~
欢乐极客 2010-05-28
  • 打赏
  • 举报
回复
要研究细节,你看hibernate的save方法怎么实现的不就行了?

另外,看reference document嘛
  • 打赏
  • 举报
回复
楼主这种情况还真没见过!不知道楼主odao.save()里面是不是有提交的语句!要是没有,应该没可能,除非你用了类似spring的事务管理
Jay_xiaolei 2010-05-26
  • 打赏
  • 举报
回复
save(),update(),delete()方法都是要在清除session缓存的时候才执行真正的sql语句
paullbm 2010-05-26
  • 打赏
  • 举报
回复
你opdao.save(wapoperation);之后不加commit语句,也能在数据库中查询到新添加进的记录?
除非你是在同一个session中,要不然不可能看到。
koskoswh12 2010-05-26
  • 打赏
  • 举报
回复
<hibernate-mapping>
<class name="com.rifetune.wapzj.common.pojo.WapOperation" table="wap_operation" catalog="wapzj">
<id name="code" type="java.lang.Long">
<column name="code" />
<generator class="identity"></generator>
</id>
<property name="description" type="java.lang.String">
<column name="description" length="200" not-null="true" />
</property>
<set name="privilege" table="wap_priv_op" cascade="none">
<key column="o_code" />
<many-to-many class="com.rifetune.wapzj.common.pojo.WapPrivilege" column="p_code"
outer-join="auto"/>
</set>

</class>
</hibernate-mapping>
koskoswh12 2010-05-26
  • 打赏
  • 举报
回复
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/wapzj
</property>
<property name="connection.username">111</property>
<property name="connection.password">111</property>
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">wapzj</property>
<property name="hibernate.jdbc.batch_size">200</property>
<property name="show_sql">true</property>
paullbm 2010-05-26
  • 打赏
  • 举报
回复
把你hibernate配置文件和WapOperation类的配置文件贴出来看看!
wj63558595 2010-05-26
  • 打赏
  • 举报
回复
你这个save进去的对象是游离态的。
楼主去了解下hibernate的 cascade与inverse属性。
解决问题后烦请告知下。本人也想知道为什么,对hibernate一直没有深入去研究过。。。
wj63558595 2010-05-26
  • 打赏
  • 举报
回复
这个问题得去修改你的hibernate的配置文件。
具体不是太记得了。楼主可以去了解下hibernate中的各个参数的含义,绝对能解决问题。太久没有用过hibernate了。。。不太记得啦
koskoswh12 2010-05-26
  • 打赏
  • 举报
回复
没人知道吗?????
koskoswh12 2010-05-26
  • 打赏
  • 举报
回复
还有一个情况是 我将 tx.commit() 换成 session.flush() 进行修改删除操作时控制台打印出hql语句,数据库中也更新了记录~~ 按道理只会打印出hql但不更新数据库记录的~ 谁能帮我解决啊~可以加分的~~~
koskoswh12 2010-05-26
  • 打赏
  • 举报
回复
Hibernate自动生成的工厂类~~ 真的就是我描述的效果~
危险的大猫 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 paullbm 的回复:]
你opdao.save(wapoperation);之后不加commit语句,也能在数据库中查询到新添加进的记录?
除非你是在同一个session中,要不然不可能看到。
[/Quote]
session在其他地方提交也会的,看你怎么生成的session
風男 2010-05-26
  • 打赏
  • 举报
回复
我不相信 save 不用提交
请问LZ你去库里看了没?
真正保存进去了吗?

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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