【问题标题】:How to use '::' in spring boot?如何在春季启动中使用'::'?
【发布时间】:2020-02-23 10:07:52
【问题描述】:

如何使用从 Postgre 到 Spring 引导的查询?

我使用这个查询在 postgre 中获取数据

"SELECT * FROM mytable WHERE delivery_date::date = '2019-10-28' limit 10;"

我正试图用这样的实体来放火

@Entity
@Table(name ="mytable")
public class DeliveryDataEntity implements Serializable {
@Column(name="delivery_date")
private Date delivery_date;

@Column(name="delivery_name")
private String delivery_name;

@Id
@Column(name="delivery_id")
private int delivery_id;
}

和我这样的回购代码

@Repository
public interface DeliveryDataRepository extends PagingAndSortingRepository<DeliveryDataEntity, Date>{
@Query(value="SELECT * FROM mytable WHERE delivery_date = ?1", nativeQuery = true)
Page<DeliveryDataEntity> findByUserAndStatusOrderByCreatedAtDesc(Date delivery_date, PageRequest pageRequest
            );
}

如果我运行没有错误,但数据不可读。 我尝试将查询更改为这样

@Query(value="SELECT * FROM mytable WHERE delivery_date >= ?1", nativeQuery = true)

and
Query(value="SELECT * FROM accounts_data WHERE updated \\= ?1", nativeQuery = true)

但是,如果我运行它会得到 null 结果。

我该如何解决这个问题? 谢谢

【问题讨论】:

    标签: postgresql spring-boot spring-data


    【解决方案1】:

    假设可能的问题是双冒号 (::) 转换运算符,这是 Spring Boot 不喜欢的,您可以尝试重构查询以改用范围:

    SELECT *
    FROM mytable
    WHERE delivery_date >= '2019-10-28' AND delivery_date < '2019-10-29'
    ORDER BY <some column>
    LIMIT 10;
    

    WHERE 子句中的逻辑只是声明查找交货日期在 2019 年 10 月 28 日午夜或之后以及严格次日午夜之前的所有记录。 p>

    JPA/Hibernate 也可能支持使用 CAST 函数,因为 Postgres 确实实现了 CAST,所以这个版本也可以工作:

    SELECT *
    FROM mytable
    WHERE (CAST delivery_date AS date) = '2019-10-28'
    ORDER BY <some column>
    LIMIT 10;
    

    【讨论】:

    • 我尝试使用 CAST 查询,但它仍然不起作用。我也试过这样 @Query("select a from mytable a where a.delivery_date
    • 错误是什么?范围查询当然应该有效。
    【解决方案2】:

    我认为您不需要 (::) 运算符。如果您只想考虑日期(不考虑时间),您可以使用@Temportal 注释,如Baeldung tutorial 中所述。

    另外,我认为您不需要使用本机查询。

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 2015-04-18
      • 2017-06-24
      • 2015-08-22
      • 2015-09-18
      • 2015-03-20
      • 2018-01-24
      • 2016-08-22
      • 2016-07-22
      相关资源
      最近更新 更多