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

时间:2018-03-02 12:49:01

标签: hibernate jpa spring-boot

所以,我有一个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子句中添加模式的任何想法?

2 个答案:

答案 0 :(得分:1)

您可以尝试指定下面的架构。

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

答案 1 :(得分:0)

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

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