#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
блоке?