JPA 2.0中的会话和事务有什么区别?

39 java orm persistence hibernate jpa

我刚刚开始我的JPA 2.0研究,我有这段代码:

em = SessionFactory.startSession();
tx = em.getTransaction();
Run Code Online (Sandbox Code Playgroud)

我的问题是:我不确定我是否完全理解使用会话和使用事务之间的区别.在几行中,有谁能告诉我他们之间最大的区别?谢谢 !

asa*_*yer 106

你去银行存入2张支票,并提取一笔小额款项.

所以你排队直到柜员打开.

你先付款.
然后你的第二个.
然后你退出.

现在你完成了,你离开了柜员线.

到达出纳员就像创建会话,现在你在银行,准备工作.

每次存款和取款都是他们自己包含的工作,这些都是您的交易.

当您完成工作并离开时,您正在关闭或放弃您的会话.


所以,从本质上讲,会话包含您的交易,毕竟如果您从未进入银行,您无法进行银行存款吗?

  • 登录用户在 stackoverflow 上创建帖子、投票、评论等都发生在一个会话中。每个单独的操作都是一个事务。另一个比喻。 (2认同)

Sea*_*oyd 10

em = SessionFactory.startSession();
Run Code Online (Sandbox Code Playgroud)

在JPA中,没有Session,也没有SessionFactory.SessionFactory是一个特定于hibernate的接口,如果你使用JPA就不应该使用它(使用Hibernate自己的API或者使用Hibernate作为JPA Provider,但不能同时使用两者.)


Jer*_*emy 5

会话是您用于与数据库交互的内容.

事务用于指定要在其中操作的会话的边界​​.

实质上,事务通过仅允许会话一次与其进行交互来防止数据库被破坏.(它有点复杂,因为你可以从数据库中读取许多事务,但只有一个事务正在编写.)