簡體   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