Hibernate наследование: объединить запрос с критериями - PullRequest
1 голос
/ 23 сентября 2019

У меня есть сущность AA, которая имеет много-много взаимосвязей с сущностью BB и BB расширяет другую сущность CC (с помощью стратегии наследования JOIN).

    @Entity
    class AA {

   @ManyToMany
   @JoinTable(name = "AA_BB", joinColumns = @JoinColumn(name = "ID_AA", referencedColumnName = "ID_AA"), inverseJoinColumns = @JoinColumn(name = "ID_BB", referencedColumnName = "ID_BB"), uniqueConstraints = @UniqueConstraint(columnNames = {
        "ID_AA", "ID_BB" }))
    private List<BB> bb = new ArrayList<>();
    }

    @Entity
    class BB extends CC {
    }

    @Entity
    @Inheritance(strategy = JOINED)
    abstract class CC {

    @Column
    private long code;

    }

Iя пытаюсь создать запрос с критериями для получения всех AA со списком BB, который содержит код, равный 100.

Следующий код не работает, и я получаю исключениетипа: вложенным исключением является org.hibernate.ObjectNotFoundException: не существует строки с данным идентификатором

            criteria.createAlias("bb", "b", JoinType.INNER_JOIN);
            criteria.add(Restrictions.eq("b.code", 100));

1 Ответ

1 голос
/ 23 сентября 2019

Согласно комментарию - вам нужно создать критерии как для мастера (AA), так и для детализации (BB).Вот что должно работать:

Criteria aaCriteria = getCurrentSession().createCriteria(AA.class,"a");
Criteria bbCriteria = aaCriteria.createCriteria("bb","b");
bbCriteria.add(Restrictions.eq("b.code", 100));

Имея объект критериев для обоих уровней, вы можете добавить ограничения для них обоих.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...