将实体分配给持久性单元(spring-boot,spring-data-jpa)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将实体分配给持久性单元(spring-boot,spring-data-jpa)相关的知识,希望对你有一定的参考价值。
我需要支持两个数据库连接。由于遗留原因,必须可以在一个外部文件中配置哪个数据库包含哪个表。
使用JEE,我将拥有一个像这样的持久性单元
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="unit-one">
<class>com.example.io.jpa.Vpt</class>
<class>com.example.io.jpa.Azg</class>
<class>com.example.io.jpa.Aus</class>
<class>com.example.io.jpa.Txt</class>
<class>com.example.io.jpa.Aco</class>
<class>com.example.io.jpa.Aks</class>
<class>com.example.io.jpa.Apr</class>
<class>com.example.io.jpa.Aie</class>
</persistence-unit>
<persistence-unit name="unit-two">
<class>com.example.io.jpa.Vif</class>
<class>com.example.io.jpa.Vid</class>
</persistence-unit>
</persistence>
实体可以根据需要在持久性单元之间重新排列。
我知道数据源参数,并且我有一个必须分配给第二单元的实体列表。其他所有内容都进入单元一。
到目前为止,我还没有在Spring Boot中找到一种方法来将Entity.class分配给LocalContainerEntityManagerFactoryBean,我发现的所有内容都是基于包的。如果没有其他方法,我会将所有实体放在单独的程序包中,但是通常看不到一个不太丑的解决方案。
答案
我发现有人遇到类似问题。他描述的解决方案也对我有用。这仍然很丑陋,因为我必须从春季开始复制/复制几个班级。因此,选择的方式不应该是。
在运行时分配实体的方法是:
@Bean(name = "someEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean someEntityManagerFactory(
EntityManagerFactoryBuilder builder)
return builder
.dataSource(tradingDataSource())
.packages("com.example.db.model.pkgtable1",
"com.example.db.model.pkgtable2",
"com.example.db.model.pkgtable3"
)
.build();
仍然需要它自己的程序包中的每个实体。
但是实际上这只是一半。我们对存储库有同样的问题。如何解决这个问题,可以在这里找到:
Spring Data JPA - How to programmatically set JpaRepository base packages
以上是关于将实体分配给持久性单元(spring-boot,spring-data-jpa)的主要内容,如果未能解决你的问题,请参考以下文章
当persistence.xml存在时,为啥持久性单元命名为null
Hibernate - 已经持久化的孩子的“分离实体传递给持久化”错误