У меня есть сущность, которая присоединяется к самому себе в манере ManyToMany:
Я хочу иметь результаты поиска, которые могут иметь вложенные результаты.
Связанные результаты не должны появляться под более чем одним основным результатом, но они могли бы.
Связанные результаты не будут иметь никаких связанных результатов, это только один уровень глубины.
@Entity
@Table(name = "SEARCH_RESULTS")
public class Result {
@Id
private Long seq;
@ManyToMany(fetch = FetchType.LAZY, targetEntity = Result.class)
@JoinTable(name = "SEARCH_RESULTS",
inverseJoinColumns = {
@JoinColumn(name = "SEQ", referencedColumnName = "SEQ",
updatable = false, insertable = false) },
joinColumns = {
@JoinColumn(name = "related_id", referencedColumnName = "related_id",
updatable = false, insertable = false, nullable = true), })
@FilterJoinTable(name="SEARCH_RESULTS",condition="IS_PRIMARY_RESULT IS FALSE")
private List<Result> related;
}
Теперь я использую Ленивую загрузку и отношение ManyToMany и применяю Критерии IS_PRIMARY_RESULT IS TRUE при получении моих сущностей.
Для простого вложения все работает нормально, но Hibernate жалуется, когда объединяемая коллекция join разделяется между несколькими основными Результатами.
Исключение, которое я получаю:
org.hibernate.HibernateException: Found shared references to a collection: abc.Results.related
Есть ли какой-нибудь способ сделать hibernate разрешающим общий доступ к коллекции?
Я пытался использовать @OneToMany, но когда таблица имеет несколько первичных результатов с одним и тем же идентификатором group_id, она бомбит с одной и той же ошибкой.
К вашему сведению: это временная таблица, созданная хранимой процедурой.