Hibernate的architecture(转载自Hibernate的4.3.4.Final的官方文档)
2014-12-23 09:50
363 查看
Hibernate的完整结构如下图所示:
下面是文档中的一些解释(英文的不作翻译了):
SessionFactory (
A thread-safe, immutable cache of compiled mappings for a single database. A factory for
Session (
A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC
Persistent objects and collections
Short-lived, single threaded objects containing persistent state and business function. These can be ordinary JavaBeans/POJOs. They are associated with exactly one
Chapter 11,
Working with objects discusses transient, persistent and detached object states.
Transient and detached objects and collections
Instances of persistent classes that are not currently associated with a
Chapter 11, Working with objects discusses transient, persistent and detached object states.
Transaction (
(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. It abstracts the application from the underlying JDBC, JTA or CORBA transaction. A
ConnectionProvider (
(Optional) A factory for, and pool of, JDBC connections. It abstracts the application from underlying
TransactionFactory (
(Optional) A factory for
Extension Interfaces
Hibernate offers a range of optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details.
contexts define different scopes to the notion of current. Applications using Hibernate prior to version 3.0 tended to utilize either home-grown
Starting with version 3.0.1, Hibernate added the
However, as of version 3.1, the processing behind
See the Javadocs for the
The first two implementations provide a "one session - one database transaction" programming model. This is also known and used as
session-per-request. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programmatic transaction demarcation in plain JSE without JTA, you are advised to use the
Hibernate
boundaries are defined declaratively and you do not need any transaction or session demarcation operations in your code. Refer to
Chapter 13,
Transactions and Concurrency for more information and code examples.
The
names: "jta", "thread", and "managed".
下面是文档中的一些解释(英文的不作翻译了):
2.1.3. Basic APIs
Here are quick discussions about some of the API objects depicted in the preceding diagrams (you will see them again in more detail in later chapters).SessionFactory (
org.hibernate.SessionFactory)
A thread-safe, immutable cache of compiled mappings for a single database. A factory for
org.hibernate.Sessioninstances. A client of
org.hibernate.connection.ConnectionProvider. Optionally maintains a
second level cacheof data that is reusable between transactions at a process or cluster level.
Session (
org.hibernate.Session)
A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC
java.sql.Connection. Factory for
org.hibernate.Transaction. Maintains a
first level cacheof persistent the application's persistent objects and collections; this cache is used when navigating the object graph or looking up objects by identifier.
Persistent objects and collections
Short-lived, single threaded objects containing persistent state and business function. These can be ordinary JavaBeans/POJOs. They are associated with exactly one
org.hibernate.Session. Once the
org.hibernate.Sessionis closed, they will be detached and free to use in any application layer (for example, directly as data transfer objects to and from presentation).
Chapter 11,
Working with objects discusses transient, persistent and detached object states.
Transient and detached objects and collections
Instances of persistent classes that are not currently associated with a
org.hibernate.Session. They may have been instantiated by the application and not yet persisted, or they may have been instantiated by a closed
org.hibernate.Session.
Chapter 11, Working with objects discusses transient, persistent and detached object states.
Transaction (
org.hibernate.Transaction)
(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. It abstracts the application from the underlying JDBC, JTA or CORBA transaction. A
org.hibernate.Sessionmight span several
org.hibernate.Transactions in some cases. However, transaction demarcation, either using the underlying API or
org.hibernate.Transaction, is never optional.
ConnectionProvider (
org.hibernate.connection.ConnectionProvider)
(Optional) A factory for, and pool of, JDBC connections. It abstracts the application from underlying
javax.sql.DataSourceor
java.sql.DriverManager. It is not exposed to application, but it can be extended and/or implemented by the developer.
TransactionFactory (
org.hibernate.TransactionFactory)
(Optional) A factory for
org.hibernate.Transactioninstances. It is not exposed to the application, but it can be extended and/or implemented by the developer.
Extension Interfaces
Hibernate offers a range of optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details.
2.2. Contextual sessions
Most applications using Hibernate need some form of "contextual" session, where a given session is in effect throughout the scope of a given context. However, across applications the definition of what constitutes a context is typically different; differentcontexts define different scopes to the notion of current. Applications using Hibernate prior to version 3.0 tended to utilize either home-grown
ThreadLocal-based contextual sessions, helper classes such as
HibernateUtil, or utilized third-party frameworks, such as Spring or Pico, which provided proxy/interception-based contextual sessions.
Starting with version 3.0.1, Hibernate added the
SessionFactory.getCurrentSession()method. Initially, this assumed usage of
JTAtransactions, where the
JTAtransaction defined both the scope and context of a current session. Given the maturity of the numerous stand-alone
JTA TransactionManagerimplementations, most, if not all, applications should be using
JTAtransaction management, whether or not they are deployed into a
J2EEcontainer. Based on that, the
JTA-based contextual sessions are all you need to use.
However, as of version 3.1, the processing behind
SessionFactory.getCurrentSession()is now pluggable. To that end, a new extension interface,
org.hibernate.context.spi.CurrentSessionContext, and a new configuration parameter,
hibernate.current_session_context_class, have been added to allow pluggability of the scope and context of defining current sessions.
See the Javadocs for the
org.hibernate.context.spi.CurrentSessionContextinterface for a detailed discussion of its contract. It defines a single method,
currentSession(), by which the implementation is responsible for tracking the current contextual session. Out-of-the-box, Hibernate comes with three implementations of this interface:
org.hibernate.context.internal.JTASessionContext: current sessions are tracked and scoped by a
JTAtransaction. The processing here is exactly the same as in the older JTA-only approach. See the Javadocs for details.
org.hibernate.context.internal.ThreadLocalSessionContext:current sessions are tracked by thread of execution. See the Javadocs for details.
org.hibernate.context.internal.ManagedSessionContext: current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a
Sessioninstance with static methods on this class: it does not open, flush, or close a
Session.
The first two implementations provide a "one session - one database transaction" programming model. This is also known and used as
session-per-request. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programmatic transaction demarcation in plain JSE without JTA, you are advised to use the
Hibernate
TransactionAPI to hide the underlying transaction system from your code. If you use JTA, you can utilize the JTA interfaces to demarcate transactions. If you execute in an EJB container that supports CMT, transaction
boundaries are defined declaratively and you do not need any transaction or session demarcation operations in your code. Refer to
Chapter 13,
Transactions and Concurrency for more information and code examples.
The
hibernate.current_session_context_classconfiguration parameter defines which
org.hibernate.context.spi.CurrentSessionContextimplementation should be used. For backwards compatibility, if this configuration parameter is not set but a
org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformis configured, Hibernate will use the
org.hibernate.context.internal.JTASessionContext. Typically, the value of this parameter would just name the implementation class to use. For the three out-of-the-box implementations, however, there are three corresponding short
names: "jta", "thread", and "managed".
相关文章推荐
- hibernate官方入门教程 (转载)
- ICE官方文档中2.2【The Ice Architecture】章节翻译之二
- 官方文档 恢复备份指南三 Recovery Manager Architecture
- hibernate官方新手教程 (转载)
- hibernate官方新手教程 (转载)
- hibernate官方入门教程 (转载)
- hibernate官方新手教程 (转载)
- hibernate官方新手教程 (转载)
- Hibernate 4.3.5 官方文档滞后,整理出一份可运行的源码【类似Student马士兵3.3版,亲测可用】
- storm学习小结二:转载一个比较好的storm官方文档译文
- Inside the ArcGIS API for Flex 1.3(官方文档精彩转载)
- JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载(转载)
- 转载Fragments (Android官方文档中文版)
- 官方文档 恢复备份指南三 Recovery Manager Architecture
- hibernate官方新手教程 (转载)
- ICE官方文档中2.2【The Ice Architecture】章节翻译之一
- hibernate官方文档
- Oracle 官方文档归类(转载)
- hibernate官方新手教程 (转载)
- hibernate官方新手教程 (转载)