如何在Spring Data JPA中向查询注释中添加模式名称

4

我目前有这样一段代码,它不能正常工作,因为我必须在查询中每个表之前添加模式名称(如DEV.DASHBOARDS_METADATA):

public interface DashboardMetadataDao extends CrudRepository<DashboardMetadata, Integer> {

    @Query("SELECT D FROM DASHBOARDS_METADATA D " + 
           "INNER JOIN FAC_DASHBOARDS_LINK DL ON D.ID = DL.DASHBOARD_ID " +
           "INNER JOIN FIRMS F ON DL.FAC_ID = F.FAC_UNIT_ID " + 
           "INNER JOIN USERS U ON U.FIRM_ID = F.FIRM_ID WHERE LOWER(U.USERID) = LOWER(:userid)")
    public Set<DashboardMetadata> findByUserId(@Param("userid") String userId);
}

问题在于不同的数据库(DEV/QA/PROD)拥有不同的模式名称。通常,我会使用组件的方法,在查询生成过程中在每个表前加上模式名称。如何使用注释实现这一点呢?谢谢!

1
你可以为每个环境使用不同的@Profile - user180100
"D.*" 是无效的 JPQL。JPQL 应该是 "SELECT D FROM ..."。 - Neil Stockton
@NeilStockton 是的,你说得对。我已经修复了它。但是我仍然找不到处理模式名称的方法。据我从 @RC 的评论中理解,无论如何,在将 Web 应用程序部署到另一个实例之前,我都必须更改配置文件名。 - Petr Shypila
3
模式是在持久化单元和实体注解中定义的。因此,您可以为生产和开发各自拥有一个持久化单元。此类内容不应存在于运行时代码中。 - Neil Stockton
2个回答

4

3

以下代码片段适用于我

@Query(
              value = "select *\n" + 
                    "from {h-schema}TABLE-A r left join {h-schema}TABLE-B p on r.ID=p.ID\n" + 
                    "left join {h-schema}TABLE-C pe on p.ID=pe.ID\n" + 
                    "left join {h-schema}TABLE-D e on pe.ENT_ID=e.ENT_ID\n" + 
                    "where r.role_type='Provisioning'", 
              nativeQuery = true)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接