首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入到两个不同数据库中的两个表中

插入到两个不同数据库中的两个表中
EN

Stack Overflow用户
提问于 2014-03-21 08:43:07
回答 3查看 3.8K关注 0票数 2

我在spring框架上的Java应用程序使用了两个数据库,比如数据库-1和数据库-2。这两个数据库都有User表。我要做的是同时在两个表中插入记录。

persistence-unit中有两个指向数据库的persistence.xml

这里是我的persistence.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                                 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0">

    <persistence-unit name="p1-jpa" transaction-type="RESOURCE_LOCAL">

        <provider>org.hibernate.ejb.HibernatePersistence</provider>


         <jta-data-source>java:jboss/datasources/MySqlDS2</jta-data-source> 

        <class>com.xyz.entity.User</class>
        <exclude-unlisted-classes />

        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" />
        </properties>

    </persistence-unit>

    <persistence-unit name="p2-jpa" transaction-type="RESOURCE_LOCAL">

        <provider>org.hibernate.ejb.HibernatePersistence</provider>


         <jta-data-source>java:jboss/datasources/MySqlDS2</jta-data-source>         
         <class>com.mmxhealthcare.entity.MMASCUser</class>  
         <exclude-unlisted-classes />

        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" />
        </properties>

    </persistence-unit>
    </persistence>

现在,每当我试图添加用户时,它只被插入到Database-1中。我没有任何例外。

这是我的spring-servlet.xml 文件:-

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:security="http://www.springframework.org/schema/security"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
        http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/security  http://www.springframework.org/schema/security/spring-security-3.1.xsd 
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
        <property name="order" value="0"/>
    </bean>

    <!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean> -->
    <context:property-placeholder location="classpath:config.properties" />
    <context:annotation-config />

    <context:component-scan base-package="com.xyz.controller" />
    <context:component-scan base-package="com.xyz.service" />
    <context:component-scan base-package="com.xyz.dao" />
    <context:component-scan base-package="com.xyz.security" />
    <context:component-scan base-package="com.xyz.dto" />
    <context:component-scan base-package="com.xyz.util" />
    <context:component-scan base-package="com.xyz.entity" />

    <tx:annotation-driven />

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <bean id="transactionManager1" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="aaentityManagerFactory" />
    </bean>

    <bean id="transactionManager2" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="mmascentityManagerFactory" />
    </bean>

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />


    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="d1SourceLocal" />
        <property name="persistenceUnitName" value="p1-jpa" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
    </bean>

    <bean id="mmascentityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="d2DataSourceLocal" />
        <property name="persistenceUnitName" value="p2-jpa" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
    </bean>

    <!-- <bean id="dataSourceLocal" class="org.springframework.jndi.JndiObjectFactoryBean">  
        <property name="jndiName" value="java:jboss/datasources/MySqlDS2"/>  
    </bean> -->

    <!-- Local -->
    <bean id="d1SourceLocal"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driver}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.username}" />
        <property name="password" value="${database.password}" />
    </bean>


    <bean id="d2DataSourceLocal"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${d2-database.driver}" />
        <property name="url" value="${d2-database.url}" />
        <property name="username" value="${d2-database.username}" />
        <property name="password" value="${d2-database.password}" />
    </bean>
</beans>

这里是我的service 类:

代码语言:javascript
复制
public class Userservice{
    @Autowired
    Database2IUserDAO immDao;

    @Autowired 
    Database1IUserDAO iaaDao;

    public User saveUser(fname,address){
    User u  = new User(); // This points Database-1 User table.
    u.setFname(fname);
    u.setAddress(address);
    iaaDao.save(u);
    User2 u2 = new User2(); // This points Database-2 User table.
    u2.setFname(fname);
    u2.setAddress(address);
    immDao.save(u2);
    }
}

这是我的Database1IUserDAO /这是一个接口

代码语言:javascript
复制
  package com.xyz.dao;
    public interface Database1IUserDAO {

        public Object save(Object ob);

    }

这是我的Database2IUserDAO /这是另一个database2接口

代码语言:javascript
复制
package com.xyz.dao;
public interface Database2IUserDAO {

    public Object save(Object ob);

}

**这最后是数据库-1和数据库2*的DAO类,我的两个DAO类都扩展了BaseDao类,其中包含了我们用来插入或保存的Save()方法。

BaseDao.java

代码语言:javascript
复制
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.transaction.annotation.Transactional;


public class BaseDAO {

    protected EntityManager entityManager;

    @PersistenceContext
    public void setEntityManager(EntityManager entityManager) {
        this. entityManager = entityManager;
    }

    @Transactional
    public Object save(Object ob) {
        Object object = entityManager.merge(ob);
        return object;
    }

    @Transactional
    public void remove(Object ob) {
        Object object = entityManager.merge(ob);
        entityManager.remove(object);
    }

    @Transactional
    public int update(String query) {
        return entityManager.createQuery(query).executeUpdate();
    }

}

请帮帮忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-21 09:40:59

正如您在Transaction Manager文件中提到的那样,您必须使用特定于数据库的spring-context.xml,如下所示。

代码语言:javascript
复制
<bean id="transactionManager2" class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="mmascentityManagerFactory" />
</bean>

您应该在DAO Class中使用特定于数据库的Transaction Manager创建一个保存函数,如下所示:

代码语言:javascript
复制
@Transactional(value="transactionManager2")
public Object save(Object ob) {
     Object object = entityManager.merge(ob);
     return object;
}

我希望它能对你有用。

票数 3
EN

Stack Overflow用户

发布于 2014-03-21 09:21:40

对于所有DAO,您似乎都在使用来自BaseDAO的相同的BaseDAO (EM)。由于您没有指定EM使用的是哪个TransactionManager,所以它将默认为下面这个:

代码语言:javascript
复制
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

..。如文档http://docs.spring.io/spring/docs/2.0.8/reference/transaction.html中所指出的(见表9.2)

如果您想要写入另一个数据库,则需要明确告诉Spring要使用哪个数据库。以这个答案为例:

Spring multiple @Transactional datasources

票数 1
EN

Stack Overflow用户

发布于 2014-03-21 09:01:03

看起来,对于两个持久性单元,您使用的数据源都是相同的。

ie :jboss/数据源/MySqlDS2 2

因此,它是插入到一个DB,这是对应于上述数据源,至少Mysql。

因此,在两个持久化单元中添加不同的数据源,这将帮助您插入到两个数据库中。

它不会给出任何例外,因为您正在使用的一个数据源可能是有效的数据源(我不能保证我们在您的文章中没有数据源信息)。

还有什么事就告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22553920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档