mysql - Spring boot jpa H2兼容模式MYSQL不工作

标签 mysql hibernate jpa spring-boot h2

我在查询中使用 Date 函数,因此我尝试在 MYSQL 模式下为我的 SpringBoot JPA< 运行 H2/ 应用程序。我在 application.yml 文件中添加了 url: jdbc:h2:mem:testdb;Mode=MYSQL ,因为我收到错误 org.h2.jdbc。 JdbcSQLException:未找到函数“DATE”; SQL 语句

但即使在 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.2 和 spring-data-jpa 1.10.5 。无法理解为什么它对我不起作用。

最佳答案

我能够完成这项工作(尽管感觉更像是一个黑客)。他们确实有一个实现,但出于某种原因他们将其作为可插入模块提供。有问题的类是这样的:https://github.com/h2database/h2database/blob/master/h2/src/main/org/h2/mode/FunctionsMySQL.java

最重要的是,该类没有打包在当前可用的 Maven jar 中。

所以我将其复制到我的源中。对于非 spring 使用,需要调用: FunctionsMYSQL.register(connection);

对于基于 spring-jdbc 的使用,由于我们无法直接访问 java.sql.Connection(在我的例子中是 spring boot jdbc starter),因此需要在使用之前执行此 sql功能: 如果“org.h2.mode.FunctionsMySQL.date”的日期不存在,则创建别名;

此类还具有 UNIX_TIMESTAMP 和 FROM_UNIXTIME 的实现。我通过将 UNIX_TIMESTAMP 插入 schema.sql(spring-jdbc 在开始时自动执行)来使用它。

关于mysql - Spring boot jpa H2兼容模式MYSQL不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43688048/

相关文章:

java - @AdditionalCriteria 作用于 EclipseLink 中的变量而不是类

java - netbeans 6.5.1 反向引擎 Oracle实体

php - 在 codeigniter 中生成多个结果

mysql - 是否真的需要在所有使用它的表中将列定义为外键

java - Spring事务注解回滚测试好像不太顺利

java - 如何告诉hibernate将调用哪个方法?我有一个类(class),2张 table

javax.persistence.OptimisticLockException + org.hibernate.StaleObjectStateException 异常

java - Hibernate 执行多个相同的查询

Mysql分组排名

mysql - mysql for django 1.8安装错误