Код: Выделить всё
CREATE TABLE `person` ( `id` int PRIMARY KEY, `previous_person` int, `next_person` int);
ALTER TABLE `person` ADD FOREIGN KEY (`previous_person`) REFERENCES `person` (`id`);
ALTER TABLE `person` ADD FOREIGN KEY (`next_person`) REFERENCES `person` (`id`);
Код: Выделить всё
@Entity
@Table(name = "`person`")
public class Person implements Serializable {
@Id
@Column(name = "id", nullable = false)
private Integer id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "next_person")
private Person nextPerson;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "previous_person")
private Person previousPerson;
public Person getNextPerson() {
return nextPerson;
}
public void setNextPerson(Person nextPerson) {
this.nextPerson = nextPerson;
}
public Person getPreviousPerson() {
return previousPerson;
}
public void setPreviousPerson(Person previousPerson) {
this.previousPerson = previousPerson;
}
}
Код в классе PersonService для получения всех сущностей:
Код: Выделить всё
public List
getAllPeople() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(Person.class);
Root rootEntry = cq.from(Person.class);
CriteriaQuery all = cq.select(rootEntry);
TypedQuery allQuery = entityManager.createQuery(all);
return allQuery.getResultList();
}
Я предполагаю, что мог бы перестать пытаться сопоставить nextPerson с сущностью, а вместо этого установить идентификатор, но мне хотелось бы ссылаться на nextPerson для каждого человека, так что это не мой желаемый подход.
Я хочу только загружать объекты, и мне не нужно сохранять или удалять какие-либо строки.
Я пробовал использовать различные связи, такие как OneToOne, но ошибка осталась прежней. Однако, насколько я могу судить, проблема заключается в цепочке отношений.
Использование типа активной выборки дает ту же ошибку.
Ошибки не возникает. выдается, если у меня есть только один ключ, например nextPerson, а не previousPerson, и объекты возвращаются правильно.
Подробнее здесь: https://stackoverflow.com/questions/786 ... -hibernate