Как исправить «Невозможно разрешить свойство: id.element» Ошибка гибернации при получении с @EmbeddedId - PullRequest
1 голос
/ 25 апреля 2019

У меня есть метод, выдающий следующую ошибку при запросе списка Hibernate сущностей при одновременном извлечении с отношением Join OneToOne , имеющим дочернего элемента @ EmbeddedId .

org.springframework.orm.hibernate3.HibernateSystemException: невозможно разрешить свойство: id.element;вложенное исключение: org.hibernate.HibernateException: невозможно разрешить свойство: id.element

Это метод запроса:

public List<Element> findAll() {
  CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();

  CriteriaQuery<Element> criteriaQuery = criteriaBuilder.createQuery(Element.class);
  Root<Element> root = criteriaQuery.from(Element.class);

  criteriaQuery.select(root).distinct(true);

  root.fetch(Element_.elementSubstitute, JoinType.LEFT);

  return getEntityManager().createQuery(criteriaQuery).getResultList();;
}

Это прекрасно работает, когда нет результатов elementSubstitutes .Также аналогичные методы хорошо работают для других не встроенных сущностей , но эти методы отображаются с использованием @ EmbeddedId , как это, поэтому я думаю, что причина ошибки.

@Entity
@Table(name = "ELEMENT")
public class Element {

        //stuff

        @OneToOne(mappedBy = "id.element", fetch = FetchType.LAZY)
        private ElementSubstitute elementSubstitute;
}

@StaticMetamodel(Element.class)
public class Element_ {

    //stuff

    public static volatile SingularAttribute<Element, ElementSubstitute> elementSubstitute;
}

@Entity
@Table(name = "ELEMENT_SUBSTITUTE")
public class ElementSubstitute {

    @EmbeddedId
    private ElementSubstituteId id = new ElementSubstituteId();

    //stuff
}

@Embeddable
public class ElementSubstituteId {

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ID_OWNER")
    private Owner owner;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ID_ELEMENT")
    private Element element;
}

Получение ElementSubstitute из одного Element объекта с getElementSubstitute () также работает, поэтому сопоставление не является неправильным и Hibernate действительно может распознать свойство id.element , когда захочет.Почему происходит сбой при получении с соединением по запросу?

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