Я создал приложение Spring Boot Groovy, управляемое Gradle, с GORM, следуя этому руководству http://guides.grails.org/gorm-without-grails/guide/index.html,, если я делаю это точно так же, как в руководстве, оно работает, однако, когда я заменяю базу данных H2 PostgreSQL (что я бы использовал в реальном сценарии), и я внесу соответствующие коррективы, это просто не сработает.
Он печатает эту трассировку стека :
2018-11-02 02:26:53.840 WARN 12130 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42P01
2018-11-02 02:26:53.840 ERROR 12130 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: relation "hibernate_sequence" does not exist
Position: 17
org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not extract ResultSet; bad SQL grammar [n/a]; nested exception is org.postgresql.util.PSQLException: ERROR: relation "hibernate_sequence" does not exist
Position: 17
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(
SQLErrorCodeSQLExceptionTranslator.java:230)
... 182 more
Во время выполнения он не создает модели базы данных в фактической базе данных postgres, я думаю, поэтому он говорит что-то вроде отношения не существует , база данных существует, просто не содержит определения таблиц.
Это мой build.gradle
buildscript {
ext {
springBootVersion = '1.5.17.RELEASE'
gormVersion = '6.1.6.RELEASE'
hibernateVersion = '5.1.0.Final'
tomcatJdbcVersion = '8.5.0'
}
...
}
apply plugin: 'groovy'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
...
dependencies {
// == Groovy ==
compile 'org.codehaus.groovy:groovy'
// == Spring ==
// Web
compile 'org.springframework.boot:spring-boot-starter-web'
// = Test =
testCompile 'org.springframework.boot:spring-boot-starter-test'
// == PostgreSQL ==
runtime 'org.postgresql:postgresql'
// == GORM Hibernate 5 ==
compile "org.grails:gorm-hibernate5-spring-boot:${gormVersion}"
// Hibernate
compile "org.hibernate:hibernate-core:${hibernateVersion}"
compile "org.hibernate:hibernate-ehcache:${hibernateVersion}"
// Connection Pooling
runtime "org.apache.tomcat:tomcat-jdbc:${tomcatJdbcVersion}"
}
файл application.properties
## Datasource
spring.datasource.url=jdbc:postgresql://localhost:5432/dirasat_api_db
spring.datasource.username=***
spring.datasource.password=***
## Hibernate Settings
# Hibernate DDL auto (create, create-drop, validate, update)
spring.jpa.database=postgresql
spring.jpa.database-platform=postgres
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.jooq.sql-dialect=postgres
## Flyway configuration
flyway.enabled=false
flyway.baseline-version=1
flyway.baseline-on-migrate=true
flyway.url=${spring.datasource.url}
flyway.user=${spring.datasource.username}
flyway.password=${spring.datasource.password}
flyway.schemas=public
flyway.locations=classpath:db/migrations
flyway.validate-on-migrate=true
Вот определения моей модели
Manufacturer.groovy
package com.example.demo.domain
import grails.gorm.annotation.Entity
import groovy.transform.ToString
import org.grails.datastore.gorm.GormEntity
@ToString
@Entity
class Manufacturer implements GormEntity<Manufacturer> {
String name
static hasMany = [vehicles: Vehicle]
}
Vehicle.groovy
package com.example.demo.domain
import grails.gorm.annotation.Entity
import groovy.transform.ToString
import org.grails.datastore.gorm.GormEntity
@ToString
@Entity
class Vehicle implements GormEntity<Vehicle> {
String name
Integer year
static belongsTo = [manufacturer: Manufacturer]
}
Когда я запускаю этот код в качестве теста или в реальном методе контроллера, выдается исключение
@Transactional
void something() {
Manufacturer audi = new Manufacturer(name: 'audi')
audi.addToVehicles(new Vehicle(name: 'A3', year: 1996))
audi.addToVehicles(new Vehicle(name: 'A4', year: 1994))
audi.save()
Manufacturer ford = new Manufacturer(name: 'ford')
ford.addToVehicles(new Vehicle(name: 'Ford KA', year: 1996))
ford.save()
List<Manufacturer> manufacturers = Manufacturer.findAll()
List<Vehicle> vehicles = Vehicle.findAll()
for (Vehicle vehicle : vehicles)
println vehicle
for (Manufacturer manufacturer : manufacturers)
println manufacturer
}
Заранее спасибо