如何在spring jpa实体中提及sqlserver数据库名称?

Posted

技术标签:

【中文标题】如何在spring jpa实体中提及sqlserver数据库名称?【英文标题】:How to mention the sqlserver database name in spring jpa entity? 【发布时间】:2019-12-01 10:34:02 【问题描述】:

我的 Spring Boot 项目有两个实体,一个是员工

@Entity
@Table(name = "Employees ",schema = "dbo")
public class Employees 

在 test1 数据库中,另一个是 Payroll

 @Entity
    @Table(name = "Payroll ",schema = "dbo")
    public class Payroll 

在 test2 数据库中,在 application.properties 文件中我有

spring.datasource.url: jdbc:sqlserver://hostname.com;databaseName=test1

这里 jpa 正在查看 test1 数据库中的两个表,因为我在 spring.datasource.url 中给出了该表

我需要知道如何让 jpa 知道 Payroll 表在 test2 数据库中可用

在 SQL SERVER Manangement studio 中,我们将通过提供此 SQL 来做到这一点

select * from test2..Payroll

这样,即使我们在 test1 db 中,我们也可以访问 test2 db 中的表

【问题讨论】:

【参考方案1】:

我通过创建本机查询解决了这个问题,在查询中说明了我的数据库名称、架构名称和表名称。

这将像 JPA 嵌入式方法一样工作,通过返回对象列表,您可以在它们上调用 getter 方法来获取存储库返回的属性。

希望这对某人有所帮助。

 @Query(
        value = "select * from dbname.schema.table",
        nativeQuery = true)
    List<Employees> fetchAllEmployees();

      @Query(
        value = "select * from test2.schema.Payroll",
        nativeQuery = true)
    List<Payroll> fetchAllPayrollData();

【讨论】:

【参考方案2】:

如果你想拥有两个不同的数据库,你应该配置两个完全不同的DataSources,并告诉Spring JPA为每个@Entity使用不同的DataSources。我认为以下链接会很有帮助:

Spring JPA - Multiple Databases

【讨论】:

以上是关于如何在spring jpa实体中提及sqlserver数据库名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Data 中漂亮地更新 JPA 实体?

如何使用 Kotlin 在 Spring JPA 中正确查询实体

在 Spring Data JPA 中,如何在运行时添加实体?

如何在 Spring Boot 中实现通用 JPA 存储库 - 它可以自动装配到任何实体/类类型的 Spring 服务中

如何使用Spring Data JPA在实体中映射Oracle Object类型?

如何在Jpa中使用所选实体创建行,RestController Spring Boot