繁体   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