我是JPA的新手,我无法理解无状态和有状态之间的用法和区别。
有经验吗?
的问候, Haythem
答案 0 :(得分:8)
Stateless和Stateful是EJB会话Bean概念,而不是JPA。
Nota bene: JPA是EJB规范的一部分,但可以单独使用,也可以在EJB容器之外使用。这通常会引起混淆。
已编辑:有用的SO帖子Why Use Stateful Session Beans。
答案 1 :(得分:3)
“有状态”和“无状态”是会话bean的属性。
会话bean(简而言之)提供了一种在应用程序服务器上调用方法的方法。 bean是java类的一个实例。通常,在远程方法终止(并返回结果)后销毁bean。那些豆是“无国籍的”。
向bean添加字段和属性是可能的(但很不寻常),以便客户端可以在服务器上“创建”此实例并将其用于多个操作。那些豆子是“有状态的”(应该避免)。
答案 2 :(得分:0)
有状态和无状态是EJB's(Java EE容器管理会话Bean)的属性,而不是JPA规范特有的任何属性。对于来自同一客户端的每个请求,Stateful bean将具有与其关联的状态。 Stateless bean没有特定于客户端的状态,并且可以在多个客户端请求之间同时使用单个实例(线程安全)。
JPA是一种持久性策略,可用于持久保存有状态bean(我猜你也可以直接使用JDBC,或者插入其他一些持久性策略)。
答案 3 :(得分:0)
我认为部分混淆是Java Persistence API是EJB3规范的一部分,有时似乎可以与EJB互换使用。在我第一次选择 Pro EJB 3:Java Persistence API 之前,我并没有真正理解这一点。看看http://en.wikipedia.org/wiki/Enterprise_JavaBean它似乎提供了关于这个主题的一个很好的概述。
答案 4 :(得分:0)
基本上,您知道Java会编译内容,然后在运行时看到应用程序,如果在类加载器之后一切正常,并避免了执行阶段错误以及在任何情况下存储变量,对象等的所有情况诸如RAM或数据库之类的地方,当用户与应用程序进行交互时,这些数据可能会更改,然后您开发了一个全状态的应用程序,如果您认为代码逻辑中没有动态的东西(可以重塑应用程序行为的事物),那么您将开发无状态应用程序。
简而言之,全状态应用程序意味着在运行时动态更改类属性。