当前位置: 首页 > 面试题库 >

HibernateTransactionManager或JpaTransactionManager

姜宏放
2023-03-14
问题内容

与朋友一起开发应用程序,但遇到一个问题…我有以下代码:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${jdbc.dialect}</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
        </props>
    </property>
</bean>

<tx:annotation-driven />
<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="dataSource" ref="dataSource" />
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

然后他删除了所有内容,将其更改为:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="persistenceUnit"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

他说,这是更好的方法,但没有确切解释原因。 关于不直接使用hibernate方式的问题,这是否意味着我们不再使用hibernate方式了?这真的更好吗?

DAO更改如下:

我有:

@Autowired
private SessionFactory sessionFactory;

public void addUser(User user) {
    sessionFactory.getCurrentSession().save(user);
}

现在是:

@PersistenceContext
private EntityManager entityManager;

public void addUser(User user) {
    entityManager.persist(user);
}

问题答案:

他希望您的代码依赖于JPA,而不是Hibernate。javax.persistence.EntityManager是JPA(Java
EE)标准接口,同时org.hibernate.SessionFactory是Hibernate专有接口。从SessionFactory移到EntityManager会使您的类不再依赖于Hibernate。如今,大多数人认为使用JPA-
way而不是Hibernate-way是最佳实践。

Please note that your system is still dependent upon Hibernate, as you need a
JPA provider. But if you want to change to another JPA provider in the future
it should be pretty straight forward. Another advantage for going for JPA is
that the JPA-interfaces are more stable than the Hibernate ones.



 类似资料:
  • 问题内容: 我想集成 Spring 和 Hibernate, 并使用 JTA 来管理事务。我还想将事务处理委托给App服务器,在我的例子中是JBoss。我有一个关于Spring中“ transactionManager ” bean 的配置的查询: 1)我们可以使用 HibernateTransactionManager 并在hibernate.properties文件中设置属性 hibernat

  • 当我尝试为org.springframework.orm.hibernate4. HibernateTransactionManager创建bean时,我得到org.springframework.beans.factory.BeanCreationException 我用的是: Hibernate4.0.1。最终 Spring 3.2.2。释放 Spring Tool Suite,版本:3.6.

  • 问题内容: 我正在调试我们的webapp。它被配置为在启动时创建一个DataSourceTransactionManager bean以及一个HibernateTransactionManager bean。这不是故意的,而是由第三方依赖引起的。效果似乎是良性的。我通过调试看到的是,当我们通过基于Hibernate的DAO持久化对象时,将调用DataSourceTransactionManager

  • 问题内容: 定义简单单击JButton的行为时,哪种方法正确?而且,有什么区别? 要么 问题答案: 是Swing中的低级事件侦听器(顺便说一下,也是AWT)。 是更高级别的,应该使用。 比起更好的选择,应该使用(实际上是)。 使用允许在多个小部件(例如,…)之间共享它;您不仅可以共享按下按钮/菜单时触发的代码,还可以共享状态,尤其是可以共享操作(及其关联的小部件)是否处于启用状态。

  • 连接的多个输入有一个为Yes则输出Yes。 用法 Your browser does not support the video tag. 案例:小闹钟 功能:逢15就猫叫 工作原理 当输入为“yes”时,“或”节点为“yes”。 例如:一种报警装置,当被暴露在光强下(光强大于30),或者被移动(陀螺仪被震动)时报警。 请注意上面的程序等于: 提示 事实上,你不需要经常使用“或”节点,因为“或”逻

  • 下面是代码的味道:https://scastie.scala-lang.org/bQMGrAKgRoOFaK1lwCy04g 我有两个JSON APIendpoint。首先是项目。cgi以以下格式返回项目对象列表 表示项目没有借款人。 其次,用户。cgi,返回查询参数id指定的用户 API可能不好,但我必须处理它。现在在Scala中,我想使用这个漂亮的数据模型 我还有以下用于执行HTTP请求的方法