这是我的自定义方言
public class MyOwnSQLDialect extends MySQL5Dialect {
public MyOwnSQLDialect() {
super();
this.registerFunction("group_concat", new SQLFunctionTemplate(StandardBasicTypes.STRING, "group_concat(?1)"));
}
}
这是我要使用的财产
application.properties
**spring.jpa.properties.hibernate.dialect=demo.orm.config.MyOwnSQLDialect**
我正在使用带有Spring JPA数据的Spring Boot。
@PropertySource(value = {"classpath:application.properties"})
@ComponentScan(value = {"demo.eaze.*"})
//@EnableTransactionManagement
@EnableJpaRepositories
@EnableJpaAuditing
@EnableWebFlux
public class Application {
public static void main(String[] args) {
try (AnnotationConfigApplicationContext context
= new AnnotationConfigApplicationContext(
Application.class)) {
context.getBean(NettyContext.class).onClose().block();
}
}
@Bean
public NettyContext nettyContext(ApplicationContext context) {
HttpHandler handler = WebHttpHandlerBuilder
.applicationContext(context).build();
ReactorHttpHandlerAdapter adapter
= new ReactorHttpHandlerAdapter(handler);
HttpServer httpServer = HttpServer.create("localhost", 8080);
return httpServer.newHandler(adapter).block();
}
}
另一个文件是:
@Configuration
@EnableAutoConfiguration
public class ApplicationConfigs {
@PostConstruct
void init() {
System.out.println("ApplicationConfigs.init");
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
}
注意: 如果我使用JPA / Hibernate,上面的代码可以工作,但是当我在Spring Boot项目中使用它时,它将无法工作。
我添加自定义方言的主要想法是由于使用了一些SQL函数,例如
JPA Criteria builder API中的GROUP_CONCAT
build.gradle
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:2.0.2.RELEASE")
compile("org.springframework.boot:spring-boot-starter-webflux:2.0.2.RELEASE")
compile("org.springframework.boot:spring-boot-starter-data-jpa:2.0.2.RELEASE")
compile("org.springframework.boot:spring-boot-starter-logging:2.0.2.RELEASE")
compile("org.springframework.boot:spring-boot-starter-actuator:2.0.2.RELEASE")
compile("org.springframework.boot:spring-boot-devtools:2.0.2.RELEASE")
compile("io.jsonwebtoken:jjwt:0.9.0")
//compile("com.h2database:h2")
// compile("com.fasterxml.jackson.datatype:jjwt:jackson-datatype-jsr310")
compile 'mysql:mysql-connector-java:8.0.11'
// providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
compile 'org.projectlombok:lombok:1.16.20'
}
答案 0 :(得分:0)
问题是您使用Spring Boot机制配置了方言。
但是您的应用程序(由main
方法启动的应用程序不是Spring Boot应用程序,因此,实际上没有发生任何Spring Boot机制。
为解决此问题,使您的应用程序成为适当的Spring Boot Application或使用标准的Hibernate方式配置您的方言。
有关Spring Boot的方法,请参见本教程:https://spring.io/guides/gs/spring-boot/
有关在Hibernate中设置SqlDialect的信息,请参见:https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html#configuration-optional-dialects