Что приводит к тому, что строка ‘значение по умолчанию’ в статическом отображении домена вызывает ошибку при использовании HibernateDatastore в тесте?

#java #hibernate #grails #groovy #grails-orm

#java #hibernate #grails #groovy #grails-orm

Вопрос:

Обновление тестов в приложении строковое значение по умолчанию в домене вызывает проблему при создании нового хранилища данных HibernateDatastore. При попытке доступа к домену я получаю сообщение об ошибке

Вызвано: org.h2.jdbc.JdbcSQLException: таблица «PERSON» не найдена;

По какой-то причине таблица вообще не создается, но при удалении строкового значения по умолчанию она будет работать.

Домен

 @ToString(includeNames=true, includePackage=false)
class Person{
EnumType type = EnumType.Human
Long age = 10
String name = "StandardName"


static mapping = {
version false
type defaultValue: EnumType.Human
age defaultValue: 10
name defaultValue: "StandardName"
}

}
  

UnitTest

 class PersonServiceSpec extends Specification implements DataTest, BuildDataTest {
    @Shared
    InterviewModelService interviewModelService

    @Shared
    HibernateDatastore hibernateDatastore

    @Shared
    PlatformTransactionManager transactionManager


    def setupSpec() {
        mockDomain Person
        hibernateDatastore = new HibernateDatastore(Person)
        transactionManager = hibernateDatastore.getTransactionManager()
        interviewModelService = hibernateDatastore.getService(PersonService)
    }


    def setup() {
    }

    def cleanup() {
    }


    @Transactional
    void "test criteria builder for getting interview models"() {
        setup:
        Person.build(name: 'steve')

        when: 
        def x = Person.findAll()

        then: 
        x.size() == 3
    }




}
  

Комментарии:

1. «Вызвано: org.h2.jdbc.JdbcSQLException: таблица «PERSON» не найдена» — Существует ли PERSON таблица? Если нет, то есть ли у вас dbCreate настройки, настроенные для ее создания при инициализации фабрики сеансов?

2. @JeffScottBrown если я удалю name defaultValue: «StandardName» из сопоставления, которое будет создано в таблице, я не получаю никаких значимых ошибок, почему оно не будет создано, и выдает ошибки только при попытке использовать «Person»

3. @JeffScottBrown также позволяет использовать name в качестве нетипизированной переменной, def name = «StandardName» позволит ее создать

4. Отключение переменной вызовет другие проблемы. Вам нужны статические типы для всех ваших постоянных свойств.

5. Почему именно это вы хотите использовать defaultValue в mapping блоке?