我在查询中使用Date
函数,因此我尝试在H2
模式下为MYSQL
应用程序运行SpringBoot JPA
。我在url: jdbc:h2:mem:testdb;Mode=MYSQL
文件中添加了application.yml
,因为我收到了错误org.h2.jdbc.JdbcSQLException: Function "DATE" not found; SQL statement
。
但即使在mode=mysql
文件中添加aplicaiton.ymll
属性后,我仍然会收到相同的错误。我还需要在任何地方添加其他内容吗?
这是我的Application.yml
spring:
datasource:
url: jdbc:h2:mem:test;Mode=MYSQL
我的查询
@Query(value = "select * from user where Date(created_date) <= ?1 and Date(modified_date) <= ?1", nativeQuery = true)
List<Users> usersByDate(String date );
我正在使用spring / hibernate创建表模式,并在我的实体中使用javax.persistence注释。我正在使用spring-boot 1.4.2
和spring-data-jpa 1.10.5
。无法理解为什么它不适合我。
答案 0 :(得分:0)
我能够做到这一点(尽管感觉更像是黑客)。他们确实有一个实现,但是出于某种原因,他们将其作为可插入模块提供。有问题的课程是这样的:https://github.com/h2database/h2database/blob/master/h2/src/main/org/h2/mode/FunctionsMySQL.java
要排在最前面的问题,该类未打包在当前可用的maven jar中。
因此我将其复制到了源文件中。对于非弹簧用途,需要将其称为:
FunctionsMYSQL.register(connection);
对于基于spring-jdbc的用途,由于我们无法直接访问java.sql.Connection
(在我的情况下是spring boot jdbc starter),因此需要在使用以下函数之前执行此sql:
CREATE ALIAS IF NOT EXISTS DATE FOR "org.h2.mode.FunctionsMySQL.date";
该类还具有UNIX_TIMESTAMP和FROM_UNIXTIME的实现。我通过将UNIX_TIMESTAMP插入schema.sql(spring-jdbc会在开始时自动执行)来使用它。