Java 如何使用spring和hibernate在我的类中获得会话工厂

Java 如何使用spring和hibernate在我的类中获得会话工厂,java,spring,hibernate,Java,Spring,Hibernate,在这里,我面临一个问题,我在application.xml文件中配置了hibernate sessionfactory,之后如何在HibDao类(用户定义类)中获得sessionfactory,以实现用户友好性,如begin()、commit()、rollback(),并扩展HibernateDaoSupport类 这是我的application-hibernate.xml文件: <beans> <bean id="sessionFactory" cla

在这里,我面临一个问题,我在application.xml文件中配置了hibernate sessionfactory,之后如何在HibDao类(用户定义类)中获得sessionfactory,以实现用户友好性,如begin()、commit()、rollback(),并扩展HibernateDaoSupport类

这是我的application-hibernate.xml文件:

  <beans>   

<bean id="sessionFactory"       class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">     
    <property name="configLocation" value="/WEB-INF/hibernate.cfg.xml" />
</bean>



<!-- Transaction manager for a single Hibernate SessionFactory (alternative 
    to JTA) -->
<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>


<!-- ========================= BUSINESS OBJECT DEFINITIONS ========================= -->

<!-- Data access object: Hibernate implementation. -->

<bean id="HibernateSpringDaoTarget" class="com.netprofit.dao.HibernateSpringDAOImpl">
    <property name="sessionFactory">
        <ref local="sessionFactory" />
    </property>
</bean>

<!-- - Transactional proxy for Application's central data access object. 
    - - Defines specific transaction attributes with "readOnly" markers, - which 
    is an optimization that is particularly valuable with Hibernate - (to suppress 
    unnecessary flush attempts for read-only operations). - - Note that in a 
    real-life app with multiple transaction proxies, - you will probably want 
    to use parent and child bean definitions - as described in the manual, to 
    reduce duplication. -->

<bean id="SpringHibernateDao"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
        <ref local="transactionManager" />
    </property>
    <property name="target">
        <ref local="HibernateSpringDaoTarget" />
    </property>
    <property name="transactionAttributes">
        <props>
            <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="store*">PROPAGATION_REQUIRED</prop>
            <prop key="add*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>
          <?xml version="1.0" encoding="UTF-8"?>
         <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     <hibernate-configuration>
<session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/netprofit</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">test</property>
    <property name="hibernate.connection.autocommit">false</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    <property name="hibernate.jdbc.batch_size">50</property>


    <property name="hibernate.c3p0.max_size">1</property>
    <property name="hibernate.c3p0.min_size">0</property>
    <property name="hibernate.c3p0.timeout">5000</property>
    <property name="hibernate.c3p0.max_statements">1000</property>

    <property name="hibernate.c3p0.idle_test_period">300</property>
    <property name="hibernate.c3p0.acquire_increment">1</property>


    <mapping class="com.netprofit.dao.hibernate.HUserRegistrationPojo" />
</session-factory>
然后我扩展了HibDao类并使用begin()、commit()和rollback()方法来处理hibernate事务。。。我也不熟悉春天


谢谢……

没有指定具体问题(没有注释行)。我读到的问题是这样的——“我已经将SessionFactorybean注入xml文件中。现在,我想在Java程序中回忆它。”

简单

ApplicationContext context = new FileSystemXmlApplicationContext("c:/../application-hibernate.xml");
SessionFactory sessionFact = (SessionFactory) context.getBean("sessionFactory");
现在您可以执行以下操作:

Session session =  sessionFact.openSession();    

注意:我是通过直接解析xml文件来获取bean的,这不是一个好的做法。在理想情况下,您将从Servlet/Action类的请求对象中获取ApplicationContext对象。

谢谢您的回复,实际上我对spring framework没有更多的了解,它是纠正上述问题的最佳方法…hi Rafeek,这是一个web应用程序还是一个独立的java项目,您正在使用?他们是否可以使用tiles或类似于SpringJSF集成的方式。。。。我如何将其作为平铺定义导航到?我知道jsf(使用tomahawk)和spring提供了tiles技术。。。在这种情况下,哪一个更适合(SpringJSF)以及如何映射结果类型…??我知道,当你说你在使用tiles和jsf时。我没有使用JSFs的经验,我有时使用Spring使用普通JSP和Velocity。它们也必须是JSFs的viewResolver。你可以为此单独提出一个问题。在我前面的问题中,如何定义会话工厂?我使用application-hibernate.xml文件及其transactionManager完成了这项工作,为了便于编码,我如何使用begin()。。。。或begin(),则在dao中执行getSession().createQuery(“”)时不需要提交。
Session session =  sessionFact.openSession();