【问题标题】:Spring jpa combine two columns and order by one column and find topSpring jpa结合两列并按一列排序并找到顶部
【发布时间】:2021-02-02 10:16:46
【问题描述】:

我有一个表,我需要根据两列获取行,并在按一列排序的帮助下查找顶部记录。

---------------------------------------------------------------------
id   product_id       sub_product_id         created_dttm
---------------------------------------------------------------------
1        1                2                   01-02-2021 07:03:25
2        2                1                   01-01-2021 08:03:25
3        1                2                   01-02-2021 09:03:25
4        2                1                   01-02-2021 08:03:25

在上表中,我必须获取productidsubproductid 之间的行,按created_dttm 排序,以获取最后插入的记录。

在 spring jpa 中,我正在尝试如下派生查询

public List<DailyStock> findTopByProductIdAndSubProductIdOrderByCreatedDttmDesc();

我希望将第 3 行和第 4 行作为列表返回

执行上述查询时,出现错误

    expects at least 1 arguments but only found 0. This leaves an operator of type SIMPLE_PROPERTY for property productTypeId unbound.

【问题讨论】:

  • 我看到了 标签,但是 SQL 在哪里?
  • @jarlh 这是一个 JPA 问题。 “SQL”被烘焙到方法名称findTopByProduct...
  • @TimBiegeleisen,答案是否包含任何 SQL? "用 SQL 标记的问题的答案应使用 ISO/IEC 标准 SQL。"
  • 删除了 sql 标签
  • @pappu_kutty 你能澄清一下I have to get rows between productid and subproductid 下的意思吗?

标签: postgresql hibernate spring-data-jpa


【解决方案1】:

你应该为你的方法添加参数

public List<DailyStock> findTopByProductIdAndSubProductIdOrderByCreatedDttmDesc(
    Long productId,
    Long subProductId
);

我假设这两列都映射到DailyStock 类的Long 属性

更新: 如果您不想传递任何参数,则应重命名您的方法以从过滤查询中排除列:

public List<DailyStock> findTopByOrderByCreatedDttmDesc();

【讨论】:

  • 但是有没有不传递参数的方法?
  • 这将得到我最后插入的记录,但我需要结合产品 ID 和子产品 ID 的最后插入记录
  • @pappu_kutty 但是你将如何告诉 DBMS 查找产品 ID 和子产品 ID 的记录而不将它们替换为查询?只是理论上
猜你喜欢
  • 1970-01-01
  • 2012-06-10
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多