Метаданные для сущности не определены - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь соединить две сущности с n:m отношениями, полосами и событиями. Когда событие удалено, группа должна остаться. Однако полоса не может быть удалена во время части события.

Прикрепленный тестовый пример завершается неудачно со следующим журналом:

    2020-03-02 21:54:32.583 [Test worker] DEBUG c.j.t.dnq.database.ConstraintsUtil - Cannot check links cardinality for entity XdEvent: id = 0-0. Entity metadata for its type [XdEvent] is undefined
    2020-03-02 21:54:32.583 [Test worker] DEBUG c.j.t.dnq.database.ConstraintsUtil - Cannot check links cardinality for entity XdBand: id = 1-0. Entity metadata for its type [XdBand] is undefined

Кажется, проблема в том, что отсутствуют метаданные объекта, но я не могу найти любые сопутствующие документы или аналогичные вопросы. Кто-нибудь знает исправление?


Entites

class XdBand(entity: Entity) : XdEntity(entity) {
    companion object : XdNaturalEntityType<XdBand>()

    var name by xdRequiredStringProp(unique = true)
    var image by xdBlobProp()
    val events: XdMutableQuery<XdEvent> by xdLink0_N(XdEvent::bands, onDelete = OnDeletePolicy.FAIL)
}
class XdEvent(entity: Entity) : XdEntity(entity) {
    companion object : XdNaturalEntityType<XdEvent>()

    var date by xdRequiredDateTimeProp()
    /**
     * Milliseconds since midnight
     */
    var startTime by xdIntProp()
    /**
     * Milliseconds since midnight
     */
    var endTime by xdIntProp()
    val bands : XdMutableQuery<XdBand> by xdLink1_N(XdBand::events, onDelete = OnDeletePolicy.CLEAR)
}

Контрольный пример

@Test(expected = ConstraintsValidationException::class)
fun testCannotRemoveBandWithEvent() {
    val bandName = "Some Band"
    Database.store.transactional {
        val event = XdEvent.new {
            date = LocalDate.now().toDateTime(LocalTime.MIDNIGHT)
            startTime = 0
            endTime = 0
        }
        XdBand.new {
            name = bandName
            events.add(event)
        }
    }

    Database.store.transactional {
        XdBand.all().first().delete()
    }
}

1 Ответ

1 голос
/ 03 марта 2020

Вам необходимо зарегистрировать эти типы в XdModel, а затем распространить эти типы для хранения:

        XdModel.registerNodes(XdBand, XdEvent)
        initMetaData(XdModel.hierarchy, store)

Вместо метода XdModel#registerNodes вы можете использовать методы XdModel#scanPackages или XdModel#scanJavaClasspath, чтобы найти все доступные типы .

...