Hibernate问题!

xoxong 2009-08-03 12:18:45
Hibernate为什么要开启一个事务(session.beginTransaction();)才能插入数据?
感觉只要执行commit应该就能将数据存入了,但是不开启就会出错!
在数据库中在关闭自动提交的情况下,不是只要执行一个commit 就能将数据放进数据库吗?
为什么Hibernate还要有个session.beginTransaction(),在Hibernate中如果我不想使用事务又怎么办?
执行session.beginTransaction(); Hibernate内部是什么原理啊
...全文
108 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingboxing088 2009-08-03
  • 打赏
  • 举报
回复
hibernate中实体类对象有三种状态,瞬态(transient)、持久态(persistent)、托管态(detached)
其中persistent状态下在内存中和数据库中都有其相应记录,并且该状态纳入session的管理,所以你要让一个瞬态对象变成持久态当然要开启事务(session)了
仙茅 2009-08-03
  • 打赏
  • 举报
回复
学习了!
lytcd 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xoxong 的回复:]
那就是说,如果你要进行save操作,Hibernate必须让你开启事务,如果不开启就会出异常。。
[/Quote]

进行save操作,不开启事务,不会出现异常,能正常操作,

只是你的操作没有纳入事务管理了 不能回滚
xoxong 2009-08-03
  • 打赏
  • 举报
回复
那就是说,如果你要进行save操作,Hibernate必须让你开启事务,如果不开启就会出异常。。
lytcd 2009-08-03
  • 打赏
  • 举报
回复
如果不想使用事务:在hibernate.cfg.xml中增加属性connection.autocommit='true' 就可以

hibernate主要优点就是引入了事务管理,如果楼主想自动提交``还不如使用jdbc

引入事务的好处,我给楼主举个小例子:

在一次保存数据中要涉及到多个表,使用事务,如果有的表保存失败则回滚,几个表中数据都没添加

如果改成自动提交,就会出现有的表保存了 有的没保存。

sangshusen_1988 2009-08-03
  • 打赏
  • 举报
回复
hibernate默认是手动提交事务的,而connection是默认是自动提交事务的
zl3450341 2009-08-03
  • 打赏
  • 举报
回复
只知要开启事务
不开启机会报错
不知原因
学城 2009-08-03
  • 打赏
  • 举报
回复
进行save操作,不开启事务,不会出现异常,能正常操作,
1楼说了一些机制。。。至于hibernate还有什么更多功能,我也还在学习中。
xoxong 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lytcd 的回复:]
引用 6 楼 xoxong 的回复:
那就是说,如果你要进行save操作,Hibernate必须让你开启事务,如果不开启就会出异常。。


进行save操作,不开启事务,不会出现异常,能正常操作,

只是你的操作没有纳入事务管理了 不能回滚
[/Quote]
纳入事务管理?具体怎么理解?不懂。。
peng_guan 2009-08-03
  • 打赏
  • 举报
回复
事务的作用是对你提交的东西进行错误或成功的处理!多的时候都处理,如果有一条没有通过则都不通过!

Hibernate其实原理是非常简单的.
我们知道如果用java连接数据库我们首先想到的就是JDBC,那么hibernate是什么呢.
hibernate可以理解为是一个中间件它负责把java程序的sql语句接收过来发送到数据库,
而数据库返回来的信息hibernate接收之后直接生成一个对象传给java.
什么??对象是什么?做什么用的?
java利用对象才可以有效的进行远程的数据传递.
= =java就是一个面向对象的语言啊.这个地方需要慢慢体会了.
peng__luo 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kingboxing088 的回复:]
hibernate中实体类对象有三种状态,瞬态(transient)、持久态(persistent)、托管态(detached)
其中persistent状态下在内存中和数据库中都有其相应记录,并且该状态纳入session的管理,所以你要让一个瞬态对象变成持久态当然要开启事务(session)了
[/Quote]

顶 事务还有一个作用,在执行增删改时,如果没有有错,则提交,否则回滚

67,513

社区成员

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

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