2013-01-03 69 views
0

我在我的項目中使用了struts2-spring-hibernate。 我處理過春天數據庫連接,所以我不需要hibernate.cfg.xml中 我要執行我的查詢,而我需要的結果如何在Hibernate中打開會話執行查詢

我獲得成功的結果,通過使用這些方法

手動打開和關閉會話: 1. Session session = sessionFactory.openSession(); 2. Session newSession = HibernateUtil.getSessionFactory()。openSession();

手動不處理會話 1. getHibernateTemplate()。find(); 2. getSession()。createSQLQuery();

我不知道哪種方法最好一個,請建議我,哪一個是最適合會議

當會話將打開,並通過getHibernateTemplate()和密切的getSession()。

+0

您的場景是否涉及在UI層上打開Hibernate會話?如果是這樣,你應該考慮[Op​​en View in View](http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/support/OpenSessionInViewFilter.html)模式。它可以通過Spring輕鬆配置。 – izilotti

+0

我在問會話休眠(Dao連接 - 查詢執行) – softmage99

回答

0

我將展示我一起使用這些框架的方式。我避免了HibernateTemplate的需要,我認爲這個類太有限了,我更喜歡直接使用Session。

一旦你的項目中有Spring,它應該在你的Daos中注入Hibernate SessionFactory,這樣你就可以處理Session。首先,你需要配置SessionFactory在你的applicationContext.xml:

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="configLocation"> 
     <value>classpath:hibernate.cfg.xml</value> 
    </property> 
</bean> 

現在你可以用@Autowired註解注入的SessionFactory:

@Repository 
public class HibernateProductDao implements ProductDao { 

    private final SessionFactory factory; 

    @Autowired 
    public HibernateProductDao(final SessionFactory factory) { 
     this.factory = factory; 
    } 

    public List<Product> findAll() { 
     return factory.getCurrentSession().createCriteria(Product.class).list(); 
    } 

    public void add(final Product product) { 
     factory.getCurrentSession().save(product); 
    } 
} 

這裏有一些重要的事情,你應該使用方法getCurrentSession(),因爲這樣你就可以讓Spring控制Session的生命週期。如果你使用getSession()來代替它,它就成爲你的責任,例如關閉會話。

現在,讓我們配置的Struts 2.在你的web.xml:

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

您需要的文件struts.xml中也說,春節將製造對象:

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
    <constant name="struts.objectFactory" value="spring" /> 
</struts> 

最後,您可以在您的動作中注入Dao:

public class ProductAction { 

    private ProductDao dao; 

    @Autowired 
    public ProductAction(ProductDao dao) { 
     this.dao = dao; 
    } 
} 

當然,由於您使用Spring註釋,用component-scan掃描軟件包。

這是我發現整合這個框架的最佳方式,我希望這很有幫助。

+0

嗨,我沒有使用hibernate註釋。 – softmage99

+0

這不是一個問題,在這個例子中我只使用了Spring註解。 –

+0

k謝謝,插入和更新,是交易提交需要? – softmage99

相關問題