Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不带Spring的多数据库JPA持久性配置_Java_Hibernate_Jpa - Fatal编程技术网

Java 不带Spring的多数据库JPA持久性配置

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

我使用的是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="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添加到持久性单元