[英]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.