簡體   English   中英

Spring-Hibernate JPA和JBOSS-將對象保存到第二個數據庫

[英]Spring-hibernate jpa and jboss - Saving objects to a second database

注意:盡管起初相似,但這與使用Hibernate的JPA使用Spring,以訪問Jboss中配置的多個數據庫/數據源不是重復的

親愛的Stackoverflow,

我有一個運行在jboss-4.2.1.GA上並使用單個數據庫的休眠應用程序的spring-jpa。

現在,我有一個第二個Spring-hibernate項目與上述項目捆綁在同一個耳文件中,但是它需要使用另一個數據庫。 第二個hibernate / spring項目是使用database.properties和hibernate.cfg.xml文件設置的。

這兩個數據庫的詳細信息存儲在jboss oracle-ds.xml文件中:

<datasources>
    <local-tx-datasource>
        <jndi-name>DefaultDS</jndi-name>
         ...
     </local-tx-datasource>
     <local-tx-datasource>
        <jndi-name>SecondDS</jndi-name>
         ...
     </local-tx-datasource>
</datasources>

我的問題是,在第二個項目中,有第二個數據庫的對象而不是第一個數據庫的對象,如何為第二個數據庫調用sessionFactory,其詳細信息存儲在oracle-ds.xml中而不是使用database.properties文件? 我看過一個例子

@Resource(mappedName = "java:SecondDS")
private DataSource secondDS;
...
java.sql.Connection conn = secondDS.getConnection();

如果很容易獲得連接(僅對准備好的語句有用),我如何掌握sessionFactory? 有沒有類似的方法?

我看過的所有示例都引用了database.properties,而不是jboss ds.xml文件。

提前致謝

有幾種解決方案,具體取決於您如何將數據源綁定到持久性上下文,Spring方式,JPA方式或Hibernate方式。

彈簧

要將spring / hibernate應用程序鏈接到JNDI數據源,您將需要使用JndiObjectFactoryBean

<bean id="serverDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/blah"/>
  <property name="proxyInterface" value="javax.sql.DataSource"></property>
</bean>

這樣,您就有了一個表示JNDI數據源的spring bean。 您將需要創建2個(每個數據源一個)。 您需要在彈簧定義的SessionFactory中注入數據源。 如果使用Spring托管的JPA實體管理器,則可以使用相同的方法。

JPA

如果使用的是JPA(會話工廠是休眠而不是jpa ...),則還可以在相應的persistance.xml文件中定義jndi數據源名稱。

<persistence-unit name="sample">
  <jta-data-source>java:/DefaultDS</jta-data-source>
  ...
</persistence-unit>

注入entityManager時需要使用unitName參數:

    @PersistenceContext(unitName="sample")  

冬眠

對於hibernate.cfg.xml文件,可以使用此屬性指定JNDI數據源。

<property name="connection.datasource">java:/comp/env/jdbc/MyDB</property>

應該刪除database.property以確保使用了jndi數據源。

這些僅是示例,最終結果將取決於您制作管道的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM