gpt4 book ai didi

java - Spring/H2/Hibernate FORMATDATETIME "unexpected token: ' yyyy.MM.dd'"

转载 作者:行者123 更新时间:2023-11-30 02:11:13 24 4
gpt4 key购买 nike

我有带有 Hibernate 和 H2 的 Spring。一切工作正常,除了我的自定义查询之一:

我的实体:

@Entity
public class Match {

@Id
@GeneratedValue( strategy = GenerationType.AUTO )
private Long id;

private Date started;

private Long time;

/* Getters and setters here */
}

我的存储库:

@Repository
public interface MatchRepository extends CrudRepository<Match, Long> {

@Query("SELECT IFNULL(sum(m.time), 0) FROM Match m where m.time >= 180000 AND m.time <= 1200000")
long getPlayingTimeTotal();

@Query("select count(*) from (select FORMATDATETIME(m.started, 'yyyy.MM.dd') from Match m where m.time >= 180000 AND m.time <= 1200000 GROUP BY FORMATDATETIME(m.started, 'yyyy.MM.dd'))")
long getNumberOfDays();
}

第一个查询方法 getPlayingTimeTotal 工作得很好,但对于第二个查询,我收到错误:

我收到错误:

line 1:22: unexpected token: (

以及稍后:

line 1:56: unexpected token: 'yyyy.MM.dd'

当我在数据库工具中检查查询时(我使用 SQuirreL SQL ),那么一切正常。

如何解决我的查询?

最佳答案

如果您未指定它们是 native 查询,则应使用 JPQL 语法,例如。 count(m) 而不是 count(*)

如果需要原生SQL,则需要执行如下操作:

@Query(nativeQuery = true,
value = "SELECT IFNULL(sum(m.time), 0) FROM Match m " +
"where m.time >= 180000 AND m.time <= 1200000")
long getPlayingTimeTotal();

@Query(nativeQuery = true,
value = "select count(*) from (" +
"select FORMATDATETIME(m.started, 'yyyy.MM.dd') " +
"from Match m where m.time >= 180000 AND m.time <= 1200000 " +
"GROUP BY FORMATDATETIME(m.started, 'yyyy.MM.dd'))")
long getNumberOfDays();

关于java - Spring/H2/Hibernate FORMATDATETIME "unexpected token: ' yyyy.MM.dd'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50044030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com