繁体   English   中英

Spring Boot JPA H2兼容模式MYSQL不起作用

[英]Spring boot jpa H2 compatibility mode MYSQL not working

我在查询中使用Date函数,因此我试图在MYSQL模式下为SpringBoot JPA应用程序运行H2 我在application.yml文件中添加了url: jdbc:h2:mem:testdb;Mode=MYSQL ,因为我收到了错误org.h2.jdbc.JdbcSQLException: Function "DATE" not found; SQL statement org.h2.jdbc.JdbcSQLException: Function "DATE" not found; SQL statement

但是即使在aplicaiton.ymll文件中添加了mode=mysql属性后,我仍然遇到相同的错误。 我还需要在任何地方添加其他内容吗?

这是我的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.2spring-data-jpa 1.10.5 无法理解为什么它对我不起作用。

我能够完成这项工作(尽管感觉更像是黑客)。 他们确实有一个实现,但是出于某种原因,他们将其作为可插入模块提供。 有问题的类是这样的: 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在开始时自动执行)来使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM