使用Hibernate了解JTA

时间:2019-01-22 10:42:46

标签: hibernate java-ee jta

在以下情况下,我难以理解JTA的角色:

Java EE应用程序正在使用以下代码将EJB实体持久存储到数据库中:

@TransactionAttribute(TransactionAttributeType.REQUIRED)
    public T makePersistent(final T entity) {
        getEntityManager().persist(entity);
        return entity;
    }

persistence.xml:

<persistence-unit name="EXAMPLE">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jboss/datasources/example-ds</jta-data-source>
    <properties>
      <property name="hibernate.default_schema" value=EXAMPLE_DB" />
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
      <property name="hibernate.format_sql" value="true" />
    </properties>
  </persistence-unit>

深入研究Hibernate的SessionImpl,我发现了以下代码段:

private void firePersist(PersistEvent event) {
    errorIfClosed();
    checkTransactionSynchStatus();
    checkNoUnresolvedActionsBeforeOperation();
    for ( PersistEventListener listener : listeners( EventType.PERSIST ) ) {
        listener.onPersist( event );
    }
    checkNoUnresolvedActionsAfterOperation();
}

这是JTA方法的第一个调用。

bean对象看起来像这样:

@Entity
@Table(name = "Example_Table")
public class ExampleObj implements Serializable {
...

所以,我的问题是:

是否有必要为Hibernate JDBC实现JTA?使用JTA有什么好处?

0 个答案:

没有答案