【问题标题】:Spring-hibernate jpa and jboss - Saving objects to a second databaseSpring-hibernate jpa 和 jboss - 将对象保存到第二个数据库
【发布时间】:2012-07-30 04:17:29
【问题描述】:

注意:虽然一开始很相似,但这不是Using Spring, JPA with Hibernate to access multiple databases/datasources configured in Jboss的复制品

亲爱的 Stackoverflow,

我有一个带有休眠应用程序的 spring-jpa 在 jboss-4.2.1.GA 上运行并使用单个数据库。

我现在将第二个 spring-hibernate 项目与上述项目捆绑在同一个 ear 文件中,但它需要使用第二个数据库。第二个 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();

如果获取连接那么容易,只对准备好的语句有用,我怎样才能获得会话工厂?有没有类似的方法?

我看到的所有例子都是指 database.properties 而不是 jboss ds.xml 文件。

提前致谢

【问题讨论】:

    标签: java database spring hibernate jboss


    【解决方案1】:

    有几种解决方案,具体取决于您如何将数据源绑定到 presistance 上下文、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 个(每个数据源一个)。他们需要在你的 spring 定义的 SessionFactory 中注入数据源。如果您使用 Spring 托管的 JPA 实体管理器,也可以使用同样的方法。

    JPA

    如果您使用的是 JPA(会话工厂是 hibernate 而不是 jpa...),您还可以在相应的 persistence.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 数据源。

    这些只是示例,最终结果将取决于您如何制作管道。

    【讨论】:

    • 感谢 Kazaag,我查看了如何访问主数据库并采用 JPA 方法。因此,我将采用相同的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多