首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring boot jpa H2兼容模式MYSQL不起作用

Spring boot jpa H2兼容模式MYSQL不起作用
EN

Stack Overflow用户
提问于 2017-04-29 03:59:07
回答 1查看 2.2K关注 0票数 2

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

但是,即使在aplicaiton.ymll文件中添加了mode=mysql属性,我仍然收到相同的错误。在任何地方还有什么需要我添加的吗?

这是我的Application.yml

代码语言:javascript
运行
复制
spring: 
  datasource:
    url: jdbc:h2:mem:test;Mode=MYSQL

我的问题

代码语言:javascript
运行
复制
@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。我不明白为什么它对我不起作用。

EN

回答 1

Stack Overflow用户

发布于 2018-07-16 23:47:55

我能够做到这一点(尽管它感觉更像是一个黑客)。他们确实有一个实现,但出于某种原因,他们将其作为一个可插拔的模块提供。有问题的类是: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),所以在使用函数CREATE ALIAS IF NOT EXISTS DATE FOR "org.h2.mode.FunctionsMySQL.date";之前需要执行这个sql。

这个类也有UNIX_TIMESTAMP和FROM_UNIXTIME的实现。我通过将UNIX_TIMESTAMP插入到schema.sql ( spring-jdbc一开始会自动执行)中来使用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43688048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档