【发布时间】:2019-11-17 11:33:30
【问题描述】:
我在 JPA 存储库中有这个查询:
@Repository
public interface PaymentTransactionsDailyFactsRepository extends JpaRepository<PaymentTransactionsDailyFacts, Integer> {
@Query(value = "SELECT " +
" COUNT(*) count, " +
" SUM(amount) volume, " +
" DATE(created_at) date, " +
" YEAR(created_at) year, " +
" MONTH(created_at) month, " +
" WEEK(created_at) week, " +
" DAY(created_at) day, " +
" type transaction_type, " +
" contract_id, merchant_id, terminal_id, " +
" status, card_brand, currency " +
" FROM payment_transactions " +
" WHERE status NOT IN ('pending_async','pending','pending_review','in_progress','new') AND created_at BETWEEN :start_date AND :end_date " +
" GROUP by date, contract_id, merchant_id, terminal_id, transaction_type, status, card_brand, currency", nativeQuery = true)
List<PaymentTransactionsDailyFacts> generateDailyFacts(@Param("start_date") LocalDate start_date, @Param("end_date") LocalDate end_date);
}
但是当我在 Spring Scheduler 中执行它时出现错误:
SQL Error: 1054, SQLState: 42S22
Caused by: java.sql.SQLSyntaxErrorException: No such column: id
当我在 MariaDB 中执行此查询时,它工作正常:
SELECT COUNT(*) count, SUM(amount) volume, DATE(created_at) date, YEAR(created_at) year, MONTH(created_at) month, WEEK(created_at) week, DAY(created_at) day, type transaction_type, contract_id, merchant_id, terminal_id, status, card_brand, currency FROM payment_transactions WHERE status NOT IN ('pending_async','pending','pending_review','in_progress','new') AND created_at BETWEEN '2011-04-11 00:00:01' AND '2029-04-11 00:00:00' GROUP by date, contract_id, merchant_id, terminal_id, transaction_type, status, card_brand, currency
如您所见,我正在为表 payment_transactions 运行此本机查询,但我期待表 payment_transactions_daily_facts 的结果。有没有办法正确实现这个查询?
【问题讨论】:
-
数据库表
payment_transactions中是否有id列。当您直接在 mariadb 中执行查询时,它会向您显示结果集,因为您不要求返回id列。但是,在您的 spring-data 应用程序中,它应该构建PaymentTransactionsDailyFacts实体,这些实体似乎具有名为id的属性。如果您发布实体定义和表定义,我们将能够检查那里有什么问题。 -
我猜你的
PaymentTransactionsDailyFacts也有一个 ID。如果是这种情况,您还需要从本机脚本中获取 Id -
顺便说一句,我不得不问这是你解释错误的标志。应该清楚您的
PaymentTransactionsDailyFacts的代码将需要解决您的问题。 -
也许你可以分享你的
PaymentTransactionsDailyFacts实体
标签: spring spring-boot spring-data-jpa mariadb jpa-2.0