Java 插入到两个不同数据库中的两个表中
我在spring框架上的Java web应用程序使用两个数据库,即database-1和database-2。两个数据库都有Java 插入到两个不同数据库中的两个表中,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我在spring框架上的Java web应用程序使用两个数据库,即database-1和database-2。两个数据库都有User表。我试图做的是将记录同时插入两个表中 在指向数据库的persistence.xml中有两个persistence单元 这是我的persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persisten
User
表。我试图做的是将记录同时插入两个表中
在指向数据库的persistence.xml
中有两个persistence单元
这是我的persistence.xml
<?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>
这是我的服务
课程:
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);
}
}
这是我的数据库1iUserDAO
//这是一个接口
package com.xyz.dao;
public interface Database1IUserDAO {
public Object save(Object ob);
}
这是我的Database2IUserDAO
//这是database2的另一个接口
package com.xyz.dao;
public interface Database2IUserDAO {
public Object save(Object ob);
}
**这是Database-1和Database-2的最后一个DAO类**
我的两个DAO类都扩展了BaseDao类,该类具有用于插入或保存的Save()方法
BaseDao.java
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();
}
}
请提供帮助。看起来您对两个持久化单元使用的数据源相同
ie java:jboss/datasources/MySqlDS2
因此,它只插入到与上述数据源mstly Mysql DB相对应的一个DB中
因此,在两个持久化单元中都添加不同的数据源,这将有助于您插入两个数据库
它不会给出任何例外,因为您使用的一个数据源可能是有效的数据源(我不能保证,因为您的帖子中没有数据源信息)
请告诉我其他情况。看起来您对两个持久化单元使用的数据源相同
ie java:jboss/datasources/MySqlDS2
因此,它只插入到与上述数据源mstly Mysql DB相对应的一个DB中
因此,在两个持久化单元中都添加不同的数据源,这将有助于您插入两个数据库
它不会给出任何例外,因为您使用的一个数据源可能是有效的数据源(我不能保证,因为您的帖子中没有数据源信息)
其他任何事情请告诉我。您似乎在对所有DAO使用来自BaseDAO的同一个EntityManager(EM)。由于您没有指定EM正在使用的TransactionManager,因此它将默认为此TransactionManager:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
。。。如文件所述(见表9.2)
如果您想写入另一个数据库,则需要明确地告诉Spring您要使用哪个数据库。以这个答案为例:
您似乎在对所有DAO使用来自BaseDAO的同一个EntityManager(EM)。由于您没有指定EM正在使用的TransactionManager,因此它将默认为此TransactionManager:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
。。。如文件所述(见表9.2)
如果您想写入另一个数据库,则需要明确地告诉Spring您要使用哪个数据库。以这个答案为例:
您必须使用特定于数据库的事务管理器,正如您在spring context.xml
文件中提到的那样,如下所示
<bean id="transactionManager2" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="mmascentityManagerFactory" />
</bean>
我希望它能为您工作。您必须使用特定于数据库的事务管理器
,如您在spring context.xml
文件中所述,如下所示
<bean id="transactionManager2" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="mmascentityManagerFactory" />
</bean>
我希望它能对您起作用。您还可以在数据库中添加用户的地方显示代码的相关信息吗?您还可以在数据库中添加用户的地方显示代码的相关信息吗?我已经编辑了我的问题并添加了所有相关代码,请查看。我现在正在使用Tomcat。嘿,你检查了我上面的回答了吗?我已经编辑了我的问题并添加了所有相关的代码,请看。我现在正在使用Tomcat。嘿,你检查了我上面的回答了吗