Почему Spring Boot с GORM не генерирует код ddl? - PullRequest
0 голосов
/ 02 ноября 2018

Я создал приложение 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
}

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...