我想知道这是否可能。如果我们遇到这样的情况:
@Query(nativeQuery = true,
value = "SELECT TA.* " +
"FROM TABLE_A TA " +
"WHERE " +
"(LOWER(NAME) LIKE NVL(CONCAT('%', CONCAT(LOWER(:#{#filter.name}), '%')), NAME) " +
"OR LOWER(CODE) LIKE NVL(CONCAT('%', CONCAT(LOWER(:#{#filter.code}), '%')), CODE)) " +
"AND (TO_CHAR(USER_WORKFLOW_ID) IN (:#{#filter.userWorkFlowIds}) OR COALESCE(:#{#filter.userWorkFlowIds}, NULL) IS NULL) " +
"ORDER BY " +
" CASE " +
" WHEN :#{#filter.orderByColumn.index} = 4 AND :#{#filter.orderDirection.index} = -1 THEN VERSION " +
" END DESC, " +
" CASE " +
" WHEN :#{#filter.orderByColumn.index} = 10 AND :#{#filter.orderDirection.index} = -1 THEN PROGRESS " +
" END DESC " +
"OFFSET LOWER(:#{#filter.pageSize} * :#{#filter.pageIndex}) ROWS FETCH NEXT LOWER(:#{#filter.pageSize}) ROWS ONLY ")
List<TableAItems> findByFilter(@Param(value = "filter") TAFilter filter);
和
@Query(nativeQuery = true,
value = "SELECT TB.* " +
"FROM TABLE_B TB " +
"WHERE " +
"(LOWER(NAME) LIKE NVL(CONCAT('%', CONCAT(LOWER(:#{#filter.name}), '%')), NAME) " +
"OR LOWER(CODE) LIKE NVL(CONCAT('%', CONCAT(LOWER(:#{#filter.code}), '%')), CODE)) " +
"AND (TO_CHAR(USER_WORKFLOW_ID) IN (:#{#filter.userWorkFlowIds}) OR COALESCE(:#{#filter.userWorkFlowIds}, NULL) IS NULL) " +
"ORDER BY " +
" CASE " +
" WHEN :#{#filter.orderByColumn.index} = 4 AND :#{#filter.orderDirection.index} = -1 THEN VERSION " +
" END DESC, " +
" CASE " +
" WHEN :#{#filter.orderByColumn.index} = 10 AND :#{#filter.orderDirection.index} = -1 THEN PROGRESS " +
" END DESC " +
"OFFSET LOWER(:#{#filter.pageSize} * :#{#filter.pageIndex}) ROWS FETCH NEXT LOWER(:#{#filter.pageSize}) ROWS ONLY ")
List<TableBItems> findByFilter(@Param(value = "filter") TBFilter filter);
我们有两个完全相同的where子句,有没有办法创建一些东西来重用它?
肯定!
只需将这部分放在常量(Java中的final static)中,然后在注释中使用它。
实例
@Query(nativeQuery = true,
value = "SELECT TB.* " +
"FROM TABLE_B TB " +
MyClass.WHERE +
"ORDER BY " +
" CASE " +
" WHEN :#{#filter.orderByColumn.index} = 4 AND :#{#filter.orderDirection.index} = -1 THEN VERSION " +
" END DESC, " +
" CASE " +
" WHEN :#{#filter.orderByColumn.index} = 10 AND :#{#filter.orderDirection.index} = -1 THEN PROGRESS " +
" END DESC " +
"OFFSET LOWER(:#{#filter.pageSize} * :#{#filter.pageIndex}) ROWS FETCH NEXT LOWER(:#{#filter.pageSize}) ROWS ONLY ")
List<TableBItems> findByFilter(@Param(value = "filter") TBFilter filter);
然后是常数
public final static String WHERE = "WHERE " +
"(LOWER(NAME) LIKE NVL(CONCAT('%', CONCAT(LOWER(:#{#filter.name}), '%')), NAME) " +
"OR LOWER(CODE) LIKE NVL(CONCAT('%', CONCAT(LOWER(:#{#filter.code}), '%')), CODE)) " +
"AND (TO_CHAR(USER_WORKFLOW_ID) IN (:#{#filter.userWorkFlowIds}) OR COALESCE(:#{#filter.userWorkFlowIds}, NULL) IS NULL) " +
我只是在Spring数据中偶然发现了一些意想不到的行为。为了演示我设置了一些Spring Boot应用程序,其中添加了JPA、Web、H2https://start.spring.io/。 该应用程序包含两个表和一些数据: data.sql: 这个表结构只有一个模型,因为两个表的结构都是一样的。我为这个表创建了一个JpaRepository 示例DAO: 最后我添加了一个控制器(TestContr
假设我们有下表,命名为“文档”: 两个*日期列是时间戳,而另一个都是字符串(甚至是) 目前我在Spring存储库中使用了以下本机查询: 如您所见,这必须用作本机查询,因为JPA不支持子句中的选择查询。现在我必须将此查询转换为JPQL查询,以使其独立于数据库。这在某种程度上是可能的吗?欢迎其他方法,例如使用规范或类似的...
当使用jpa本机查询 事务传播是我们正在使用的正确jpa的唯一特性吗? 在我的意见中,我就像使用普通的旧jdbc pluc jpa事务传播 我正在阅读PRO JPA一书,根据我的理解 当我们使用JPA本机查询获取一组标量值时(与我们使用jdbc的方式很相似),实际上没有托管实体和持久性上下文的概念。当我们通过本机查询检索实体时,情况会发生变化。
我刚刚开始在Apollo和Vue中使用GraphQL,所以这可能是一个“愚蠢”的问题,但我不知道怎么做。 如何在同一个视图中执行查询以获取一个对象,并使用变异更新它 假设我有一个简单的模式 和vue组件 现在我应该如何编写模板部分?我可以将产品对象链接到输入中的v模型吗? 谢谢你的帮助。
视图查询可以实现不依赖数据库视图的多表查询,并不需要数据库支持视图,是JOIN方法的推荐替代方法,例如: Db::view('User', 'id,name') ->view('Profile', 'truename,phone,email', 'Profile.user_id=User.id') ->view('Score', 'score', 'Score.user_id=Pr
我想用不同的列值执行相同的SQL查询,即:我有一个如下表: 从上表中,我想获取员工组的和。请建议我如何在不执行多次的情况下进行查询以获取上述数据。