java - Spring如何与Hibernate集成

标签 java spring hibernate

我知道如何使用 hibernate 配置 Spring。

但我的问题是 spring 和 hibernate 如何集成以及如何工作。

下面是我用来创建 Spring + Hibernate 应用程序的代码。

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource" />
    </property>
     <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
            <prop key="hibernate.show_sql">false</prop>
        </props>
    </property>
</bean>

并且这个sessionFactory bean被注入(inject)到java代码中,

import org.hibernate.SessionFactory;
public class DAOSupport extends HibernateDaoSupport {

@Autowired
public void createSessionFactory(SessionFactory sessionFactory) {
    setSessionFactory(sessionFactory);
}

如您所见,我创建的 session 工厂与 spring 包相关联,但在代码中它使用的是 hibernate 包。

PS:我知道 HibernateDaoSupport 已被弃用,这只是为了了解这两个框架的工作原理。

感谢 Gimby 提供的链接。 JavaDoc

最佳答案

Spring 的AnnotationSessionFactoryBean (以及 LocalSessionFactoryBean )实现了名为 FactoryBean 的接口(interface).它有一个特殊的方法叫做 Object getObject() .

每当 Spring 发现您使用 FactoryBean 的实现时接口(interface),它调用Object getObject()方法而不是创建类本身的实例。

在这种情况下,SessionFactory方法调用将返回对象。

更具体地说,AnnotationSessionFactoryBean工具 FactoryBean<SessionFactory>实际上返回 SessionFactory对象,以便可以将其注入(inject) Hibernate。

关于java - Spring如何与Hibernate集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35913323/

相关文章:

java - JPQL 内连接

java - 在Android中使用Parcelable时如何读取/写入嵌套的ArrayList?

java - spring boot编译找不到符号componentscan

java - 对 Java 8 流进行分区

java - Spring MVC 和 Hibernate 无法获取当前线程的事务同步 session

hibernate - 确定传递依赖包括一个特定的库-Gradle

java - 在java中改变一个字节内的一位

java - 让 Spring MVC 与 JodaModule 一起工作

java - 如何避免在java文件中硬编码字符串?

hibernate - Grails:无法将数据库状态与 session 同步