Добрый день.
Задача: необходимо, чтобы изначально, после первого запуска в проекте уже хранились какие-то стандартные экземпляры сущности, чтобы не вносить их каждый раз заново.
Для примера, вот groovy-скрипт обновления БД, который вносит в базу типы контейнеров.
import com.haulmont.cuba.core.Persistence
import com.haulmont.cuba.core.global.AppBeans
import com.groupstp.dispatching.entity.container.ContainerType
import com.groupstp.dispatching.entity.Material
postUpdate.add({
log.info('Executing post update action using fully functioning server')
def p = AppBeans.get(Persistence.class)
def tr = p.createTransaction()
try {
def em = p.getEntityManager()
Material material = new Material()
material.name = "ТКО"
em.persist(material)
ContainerType type
type = new ContainerType()
type.name = 'Евроконтейнер 1,1м'
type.volume = 1.1
type.weight = 0
type.wheelsCount = 0
type.isCapAvailable = false
type.isSWC = false
type.material = material
em.persist(type)
type = new ContainerType()
type.name = 'Стандартный контейнер 0,75м'
type.volume = 0.75
type.weight = 0
type.wheelsCount = 0
type.isCapAvailable = false
type.isSWC = false
type.material = material
em.persist(type)
type = new ContainerType()
type.name = 'Бункер 8м'
type.volume = 8.0
type.weight = 0
type.wheelsCount = 0
type.isCapAvailable = false
type.isSWC = false
type.material = material
em.persist(type)
tr.commit()
} finally {
tr.end()
}
})
При первом запуске проекта, когда база данных не существует, CUBA почему-то игнорирует выполнение данного скрипта, хотя запись в таблице sys_db_changelog о том что скрипт был применен присутствует.
Однако данные, которые должен внести скрипт так и не появились.
Проблема решается удалением соответствующих записей в таблице sys_db_changelog и рестарт проекта. В таком случае groovy скрипты обновления создают указанные в них экземпляры сущностей.
Такой способ конечно же можно использовать на тестовом сервере, а на рабочем уже неприемлемо.
Можете ли вы подсказать другие варианты решения проблемы? А так же сказать по какой причине скрипты обновления игнорируются?