Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 两个实体管理工厂_Java_Spring_Jpa - Fatal编程技术网

Java 两个实体管理工厂

Java 两个实体管理工厂,java,spring,jpa,Java,Spring,Jpa,我希望有两个EntityManagerFactory(org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean),其中每个都有自己的数据源和自己的持久对象集 因此,我需要能够将实体范围限定到特定的实体管理器工厂。我不希望将实体名称硬编码到persistence.xml 当JPA扫描实体时,也许有某种方法可以在类路径扫描器上放置一个过滤器?或者以某种方式将实体连接到特定的持久性单元。也许我误解了您的要求,但是 通过为每个文

我希望有两个EntityManagerFactory(
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
),其中每个都有自己的数据源和自己的持久对象集

因此,我需要能够将实体范围限定到特定的实体管理器工厂。我不希望将实体名称硬编码到
persistence.xml


当JPA扫描实体时,也许有某种方法可以在类路径扫描器上放置一个过滤器?或者以某种方式将实体连接到特定的持久性单元。

也许我误解了您的要求,但是


通过为每个文件指定唯一的名称来分别定义文件。通过
persistenceUnitName
属性为每个
LocalContainerEntityManagerFactoryBean
实例指定所述名称。

您的两个PUs将具有相同的类(域对象),但它们通过您为两个不同的工厂bean指定的PU名称来区分,并将它们注入到各自的DAO中。现在,如果您使用Hibernate作为JPA提供者,那么您可以定义

<property name="hibernate.archive.autodetection" value="class,hbm" />


要让工厂自动扫描实体的类路径(根据使用注释还是hbm文件,使用class或hbm),则不必显式列出类。

是,但如何将不同的实体类分配给不同的工厂?我必须在persistence.xml中指定实体吗?我不希望这样做,但我很确定这是唯一的方法。那么,您还需要如何映射实体类呢?在persistence.xml中指定它们是唯一的方法,不管您是有一个或多个持久性单元,每个单元都有单独的工厂。或者我遗漏了什么?一种方法是将它们分成不同的jar,让每个jar都有自己的spring配置文件,然后在不同的包中有不同的实体。这样您就不用在persistence.xml中指定它们了。尽管最简单的方法就是在persistence.xml中指定它们