Hibernate没有在生成的HQL查询上指定模式

问题描述 投票:0回答:2

所以,我有一个spring boot + hibernate应用程序,它有一个在yml文件(分子)中指定的主模式,还需要从其他3个(vivax,疟疾,机箱)获取东西

因此,所有模式都可以通过同一个用户访问,并且都可以通过端口3306访问,所以我的dev.yml文件连接区域如下所示:

datasource:
        type: com.zaxxer.hikari.HikariDataSource
        url: jdbc:mysql://localhost:3306/molecular?useUnicode=true&characterEncoding=utf8
        username: universalUser
        password: universalPass

我把EntityScan设置为:

@EntityScan(basePackages = {
    "org.wwarn.malaria.server.data",
    "org.wwarn.chassis.server.data",
    "org.wwarn.surveyorDM.domain.vivax",
    "org.wwarn.surveyorDM.domain"})

因此,当看到“外星人”实体时,它不会感到害怕,因此应用程序编译并开始正常

但是,当我尝试在任何软件包(org.wwarn.surveyorDM.domain除外)上执行默认存储库操作时,它不会正确构建HQL查询,假设我需要找到所有vivax.Category

在域类中,我指定了模式:

@Entity
  @Table(name = "Category", schema = "vivax")

它有它的jpa存储库:

public interface CategoryRepository extends JpaRepository<Category,Long> {

}

但是hql查询将会出现:

Hibernate: select category0_.id as id1_59_, category0_.name as name2_59_, category0_.version as version3_59_ from Category category0_

当我需要它在vivax.Category条款中指定FROM

因此,如果我将以下本机查询添加到存储库:

@Query(value="select distinct * from vivax.Category", nativeQuery=true)
    List<Category> findAllCats();

它就像一个魅力

关于如何强制hibernate在FROM子句中添加模式的任何想法?

hibernate jpa spring-boot
2个回答
1
投票

您可以尝试指定如下所示的架构。

@Entity
@Table(name = "vivax.Category")

0
投票

我注意到你使用的是MYSQL数据库and in mysql there is no difference between schema and database。我怀疑这是在连接到MYSQL数据库时忽略schema属性的原因。例如,这适用于POSTGRESQL数据库。我会尝试使用juserman10提出的方法,这就是将db和表名称连接在@Table注释名称属性中。

如果这不起作用,您可以在应用程序中配置多个数据源,每个数据库对应一个数据源。

© www.soinside.com 2019 - 2024. All rights reserved.