Я пытаюсь выяснить, как настроить спящий режим для следующих таблиц.Hibernate Parent/Child/Grandchild OneToMany Access
CREATE TABLE parent (
id BIGINT
);
CREATE TABLE child (
id BIGINT,
parent_id BIGINT
);
CREATE TABLE grandchild (
id BIGINT,
child_id BIGINT
);
У меня есть конфигурация работает для доступа детей из родителей (OneToMany) и внуков от ребенка (OneToMany), однако, я борюсь с отображением, что позволяет мне получить доступ к внукам из parent (OneToMany).
Вот отображения Hibernate я в настоящее время:
public class Parent {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "child") //This is the mapping that doesn't work
private Set<Grandchild> grandchildren;
}
public class Child {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id", referencedColumnName = "id")
private Parent parent;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "child")
private Set<Grandchild> grandchild;
}
public class Grandchild {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "child_id", referencedColumnName = "id")
private Child child;
}
По какой-то причине, что дает мне сообщение об ошибке: '[PersistenceException: Запрос бросил SQLException: ОШИБКА: колонка t0.parent_id не существует позиций: 8 значения Bind: [1] Запрос был: выберите t0.parent_id как c0, t0.id как c1 из grandchild t0 где (t0.parent_id) в (?) ' – MrGrinst
@MrGrinst Я протестировал его, и он работает для меня. Пожалуйста, предоставьте свои конечные классы сущностей и полный SQL из исключения – bedrin
@MrGrinst нет, я использовал точно такое же сопоставление, которое вы разместили, - вы можете видеть в запросе, что Grandchild имеет псевдоним grandchild2_, и мы используем только два столбца: ID который является суррогатным ключом для внуков и child_id, который является внешним ключом к таблице для детей. – bedrin