Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于spring和hibernate,需要澄清数据源和会话是如何连接的_Java_Hibernate_Spring_Spring Mvc - Fatal编程技术网

Java 对于spring和hibernate,需要澄清数据源和会话是如何连接的

Java 对于spring和hibernate,需要澄清数据源和会话是如何连接的,java,hibernate,spring,spring-mvc,Java,Hibernate,Spring,Spring Mvc,我的DAO将扩展spring提供的HibernateDaoSupport类 现在我需要: 在web.xml中设置我的数据库连接 告诉spring我正在为hibernate映射使用注释 将会话连接到HibernateDaoSupport对象 该文档显示了一个示例xml: <beans> <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&

我的DAO将扩展spring提供的
HibernateDaoSupport

现在我需要:

  • 在web.xml中设置我的数据库连接
  • 告诉spring我正在为hibernate映射使用注释
  • 将会话连接到HibernateDaoSupport对象
  • 该文档显示了一个示例xml:

    <beans>
    
      <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
      </bean>
    
      <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
        <property name="mappingResources">
          <list>
            <value>product.hbm.xml</value>
          </list>
        </property>
        <property name="hibernateProperties">
          <value>
            hibernate.dialect=org.hibernate.dialect.HSQLDialect
          </value>
        </property>
      </bean>
    
    </beans>
    
    
    product.hbm.xml
    hibernate.dialogue=org.hibernate.dialogue.hsql方言
    
    因此,“mydatasource”配置到数据库的连接,mySessionFactory设置会话

    我感到困惑的是,这些bean在代码中的什么地方被使用

    我想创建一个扩展
    HibernateDaoSupport
    GenericDaoImpl
    。然后我将创建扩展GenericDaoImpl的
    EntityDaoImpl

    只是混淆了“mydatasource”和“mysessionFactory”在内部的使用位置。它们不都应该是
    HibernateDaoSupport
    的属性吗?

    它们不都应该是我们的财产吗 冬眠支持

    嗯,
    SessionFactory
    应该。DAO不需要
    数据源
    ,因为它是由
    会话工厂内部使用的。您自己的代码应该不需要原始
    数据源
    ,因此不必注入它

    您的DAO(扩展了
    HibernateDaoSupport
    )需要注入
    SessionFactory
    bean,例如

    public class DaoA extends HibernateDaoSupport {
       // business methods here, that use getHibernateTemplate()
    }
    
    public class DaoB extends HibernateDaoSupport {
       // business methods here, that use getHibernateTemplate()
    }
    

    
    
    Ah ok,但由于我使用的是每个EntityDao将从中继承的GenericDao,所以我只需要做一次!很酷。那么你说“mydatasource”只是供“mysessionfactory”bean引用,在代码中真的不应该有任何对“mydatasource”bean的引用吗?它仅在.xml中被sessionFactory引用,对吗?Spring将要求您为要使用的每个GenericDao实现声明一个实例,否则Spring将不知道如何创建实例
    <bean id="daoA" class="DaoA">
       <property name="sessionFactory" ref="mySessionFactory"/>
    </bean>
    
    <bean id="daoB" class="DaoB">
       <property name="sessionFactory" ref="mySessionFactory"/>
    </bean>