Я пытаюсь смоделировать отношения Отец / Дети в Spring Data JDB C (версия 1.1.5.RELEASE). Пока мне удалось заставить работать операцию вставки, но я столкнулся с ошибкой при чтении данных.
Объекты выглядят так
@Table("FATHER")
data class FatherDao(
@Id
val id: Long?,
@MappedCollection(idColumn="father_id")
val childrens: Set<ChildrenDao>
)
@Table("CHILDREN")
data class ChildrenDao(
@Id
val id: Long?,
val father: FatherDao?
)
Схема следующее:
CREATE TABLE father (
id INT GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1)
PRIMARY KEY (id)
);
CREATE TABLE children (
id INT GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1),
father_id INT
PRIMARY KEY (id)
);
На данный момент я опустил внешний ключ на character_id
.
Репозиторий просто
@Repository
interface FatherRepository : CrudRepository<CharacterDao, Long>
Для сохранения дочерних объектов, связанных с отец, я не вызываю ChildrenRepository
, но вместо этого продолжаю сохранять сущность отца.
Создание проходит гладко, но когда я пытаюсь получить созданную сущность, я получаю следующее исключение
user lacks privilege or object not found: FATHER.CHILDREN_DAO in statement [SELECT CHILDREN.id AS id, father.id AS father_id FROM CHILDREN LEFT OUTER JOIN FATHER AS father ON father.children_dao = CHILDREN.id WHERE CHILDREN.father_id = ?]
Моя главная проблема в том, что я не могу понять, откуда взялся FATHER.CHILDREN_DAO
. Я вполне уверен, что это вызвано плохим отображением в сущности FatherDao
, но даже глядя на Spring Data JDB C docs относительно наборов, я не могу найти подсказку.