Java 不带Spring的多数据库JPA持久性配置
我使用的是JPA,没有Spring连接到多个不同结构的postgreSql数据库。My persistence.xml:Java 不带Spring的多数据库JPA持久性配置,java,hibernate,jpa,Java,Hibernate,Jpa,我使用的是JPA,没有Spring连接到多个不同结构的postgreSql数据库。My 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" version
<?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"
version="2.0">
<persistence-unit name="central" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- <provider>org.hibernate.ejb.HibernatePersistence</provider> -->
<class>model.central.Invoice</class>
<!-- <exclude-unlisted-classes>false</exclude-unlisted-classes>-->
<properties>
<property name="hibernate.connection.url" value="jdbc:postgresql://xxx.xx.xxx.xx:5432/central"/>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.connection.username" value="admin"/>
<property name="hibernate.connection.password" value="xxxx"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.flushMode" value="FLUSH_AUTO"/>
<!-- <property name="hibernate.hbm2ddl.auto" value="validate"/> -->
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
</properties>
</persistence-unit>
<persistence-unit name="S1A" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- <provider>org.hibernate.ejb.HibernatePersistence</provider> -->
<class>model.customer</class>
<!-- <exclude-unlisted-classes>false</exclude-unlisted-classes>-->
<properties>
<property name="hibernate.connection.url" value="jdbc:postgresql://xxx.xx.xx.xx:5432/S1A"/>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.connection.username" value="admin"/>
<property name="hibernate.connection.password" value="xxxx"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.flushMode" value="FLUSH_AUTO"/>
<!-- <property name="hibernate.hbm2ddl.auto" value="validate"/> -->
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
</properties>
</persistence-unit>
org.hibernate.jpa.HibernatePersistenceProvider
模型中央发票
org.hibernate.jpa.HibernatePersistenceProvider
模范顾客
出于某种原因,当我持久化我的客户模型对象时,我还看到在两个数据库上都创建了发票表。当我持久化这些对象时,我希望在“cental”数据库中看到Invoice表,在“S1A”数据库中看到Customer表。然而,当我持久化一个对象时,数据库最终都是Customer和Invoice表
这是我的道课:
public class Dao {
private String dbname;
private static Map<String, EntityManager> emMap;
private static EntityManagerFactory entityManagerFactoryCentral;
private static EntityManager entityManagerCentral;
private static EntityManagerFactory entityManagerFactoryS1A;
private static EntityManager entityManagerS1A;
static {
emMap = new HashMap<String, EntityManager>();
entityManagerFactoryCentral = Persistence.createEntityManagerFactory("central");
entityManagerCentral = entityManagerFactoryCentral.createEntityManager();
emMap.put("central", entityManagerCentral);
entityManagerFactoryS1A = Persistence.createEntityManagerFactory("S1A");
entityManagerS1A = entityManagerFactoryS1A.createEntityManager();
emMap.put("S1A", entityManagerS1A);
}
public Dao(String dbname) {
this.dbname = dbname;
}
public void persist( Object... objects ){
EntityManager entityManager = emMap.get(dbname);
try {
entityManager.getTransaction().begin();
for ( Object object : objects ){
entityManager.persist(object);
}
entityManager.getTransaction().commit();
} catch( Exception e ){
e.printStackTrace();
try {
entityManager.getTransaction().rollback();
} catch (Exception e2){
e2.printStackTrace();
}
}
}
公共类Dao{
私有字符串dbname;
私有静态映射;
私有静态EntityManagerFactory entityManagerFactoryCentral;
私有静态实体管理器实体管理器中心;
私有静态实体管理器工厂实体管理器工厂1A;
专用静态实体管理器实体管理器1A;
静止的{
emMap=newhashmap();
entityManagerFactoryCentral=Persistence.createEntityManagerFactory(“central”);
entityManagerCentral=entityManagerFactoryCentral.createEntityManager();
emMap.put(“中心”,实体管理中心);
entityManagerFactoryS1A=持久性。createEntityManagerFactory(“S1A”);
EntityManager 1A=EntityManager工厂1A.createEntityManager();
emMap.put(“S1A”,实体管理器1A);
}
公共Dao(字符串dbname){
this.dbname=dbname;
}
公共void持久化(对象…对象){
EntityManager EntityManager=emMap.get(dbname);
试一试{
entityManager.getTransaction().begin();
用于(对象:对象){
entityManager.persist(对象);
}
entityManager.getTransaction().commit();
}捕获(例外e){
e、 printStackTrace();
试一试{
entityManager.getTransaction().rollback();
}捕获(异常e2){
e2.printStackTrace();
}
}
}
因此,这里的问题是如何在没有Spring的情况下使用一个persistence.xml文件,并使用JPA连接到model.central和model package下具有不同类列表的多个数据库。对此帖子感到抱歉。我编辑了位于war/META-INF下的错误persistent.xml文件,而不是类路径src/META-INF。此外,我没有o将true添加到持久性单元