Java Crudepository使用不正确的表/架构来选择实体

Java Crudepository使用不正确的表/架构来选择实体,java,sql,spring,spring-data-jpa,Java,Sql,Spring,Spring Data Jpa,最近,我启动了一个小项目,通过使用不同的配置将实体保存到数据库来检查性能 我最终得到了3个模式。每个架构包含5个同名表。当我尝试使用CRUDEPositoryFindAll或CRUDEPositoryCount时,会生成从错误模式中选择数据的select 下面是我的带有test的项目的确切提交,以重现问题test identitytestsave e、 g.对于积存计数,我得到: 当我注释所有PrimaryTable实体并只保留正确模式标识中的一个时,我将在应用程序日志中得到正确的选择 sele

最近,我启动了一个小项目,通过使用不同的配置将实体保存到数据库来检查性能

我最终得到了3个模式。每个架构包含5个同名表。当我尝试使用CRUDEPositoryFindAll或CRUDEPositoryCount时,会生成从错误模式中选择数据的select

下面是我的带有test的项目的确切提交,以重现问题test identitytestsave

e、 g.对于积存计数,我得到:

当我注释所有PrimaryTable实体并只保留正确模式标识中的一个时,我将在应用程序日志中得到正确的选择

select
        count(*) 
    from
        PrimaryTable x */ select
            count(*) as col_0_0_ 
        from
            identity_schema.primary_table primarytab0_
此外,从我所注意到的情况来看,CrudepositoryFindByid的工作没有任何问题。谁能告诉我这里有什么问题吗

谢谢,因为您的PrimaryTable存储库正在导入PrimaryTable标识

导入com.mz.example.db.identity.entity.PrimaryTable

并且使用它作为实体泛型参数,存储库将使用PrimaryTable的定义,即模式

如前所述,您正在注释除要使用的主表之外的任何主表。您可能遇到编译错误,并在存储库中重新导入了正确的类,即一对一

如果您使用的是Eclipse,另一个可能的选项是,如果您没有在“项目”选项卡下选中“自动生成”,并且您运行的是旧版本或代码

在我看来,你不会以那种方式达到你的目标。Spring数据存储库只使用一个实体。您有5个表和3个模式,因此需要15个存储库,并使用和策略模式设计来选择使用哪一个存储库

另一个更好的选择是在连接字符串中指定模式。在这种情况下,访问数据只需要5个实体和5个存储库。我不是gradle方面的专家,但在maven中,您可以使用maven资源插件和配置文件来替换部分配置,以设置适当的连接字符串

希望能有所帮助。

因为您的PrimaryTable存储库正在导入PrimaryTable标识

导入com.mz.example.db.identity.entity.PrimaryTable

并且使用它作为实体泛型参数,存储库将使用PrimaryTable的定义,即模式

如前所述,您正在注释除要使用的主表之外的任何主表。您可能遇到编译错误,并在存储库中重新导入了正确的类,即一对一

如果您使用的是Eclipse,另一个可能的选项是,如果您没有在“项目”选项卡下选中“自动生成”,并且您运行的是旧版本或代码

在我看来,你不会以那种方式达到你的目标。Spring数据存储库只使用一个实体。您有5个表和3个模式,因此需要15个存储库,并使用和策略模式设计来选择使用哪一个存储库

另一个更好的选择是在连接字符串中指定模式。在这种情况下,访问数据只需要5个实体和5个存储库。我不是gradle方面的专家,但在maven中,您可以使用maven资源插件和配置文件来替换部分配置,以设置适当的连接字符串


我希望它能有所帮助。

通过使用相同的简单类名,您可以使用相同的名称创建多个实体,默认情况下,这是简单类名。
使用@Entity注释的name属性为所有实体指定不同的名称。

通过使用相同的简单类名,可以创建具有相同名称的多个实体,默认情况下,该名称为简单类名。
使用@Entity注释的name属性为所有实体指定不同的名称。

我认为,由于每个模式的类名PrimaryTable相同,您需要在实体和存储库中添加@QualifierbeanName,以便存储库能够理解绑定哪个bean。我认为,由于每个模式的类名PrimaryTable相同,您需要在实体和存储库中添加@QualifierbeanName,以便存储库能够理解绑定哪个bean。Hello@bipe15,也许我不清楚我的问题。com.mz.example.db.identity.entity.PrimaryTable是我想要使用的实体,我想要从identity_模式中选择数据。但由于未知原因,存储库对一对一模式执行选择。另外,我知道我将不得不创建15个存储库,每个存储库处理不同的实体,只是还没有这样做。您好@bipe15,也许我不清楚我的问题。com.mz.example.db.identity.entity.PrimaryTable是我想要使用的实体,我想要从identity_模式中选择数据。但由于未知原因,存储库对一对一模式执行选择。另外,我知道我将不得不创建15个存储库,每个存储库处理不同的实体,只是还没有这样做。
select
        count(*) 
    from
        PrimaryTable x */ select
            count(*) as col_0_0_ 
        from
            identity_schema.primary_table primarytab0_