Подзапрос Hibernate create существует с таблицей связей - PullRequest
0 голосов
/ 23 октября 2018

У меня есть схема БД, подобная этой:

CREATE TABLE livraison ( /* delivery */
  id INTEGER PRIMARY KEY NOT NULL DEFAULT nextval("livraison_id_livraison_seq"
  /* others propertes */
)

CREATE TABLE article ( /* product */
  id INTEGER PRIMARY KEY NOT NULL DEFAULT  nextval("article_id_article_seq")
  /* others properties */
)

CREATE TABLE article_livre ( /* association table */
  id_article INTEGER NOT NULL REFERENCES article(id),
  id_livraison INTEGER NOT NULL REFERENCES livraison(id),
  rang INTEGER,
  PRIMARY KEY (id_article, id_livraison)
)

Классы сущностей таковы:

@Entity
@Table(name="livraion")
class Livraison { /* ... */ }

@Entity
@Table(name="article")
class Article { /* ... */ }

@Entity
@Table(name="article_livre")
@AssociaitonOverride({
  @AssociationOverride(name="id.article", joinColumns=@JoinColumn(name="id_article"),
  @AssociationOverride(name="id.livraison", joinColumns=@JoinColumn(name="id_livraison")
})
class ArticleLivre {
  /* ... */
  @EmbeddedId
  public ArticleLivrePK getId() { /* ... */ }
  /* ... */
}

@Embeddable
class ArticleLivrePK {
  /* ... */
  @ManyToOne
  public Article getArticle() { /* ... */ }

  @ManyToOne
  public Livraison getLivraison() { /* ... */ }
  /* ... */
}

Один и тот же продукт может быть доставлен несколько раз (он сдан в аренду), так чтоможет быть в нескольких поставках.

Я пытаюсь выполнить запрос, подобный этому примеру (HQL), с помощью построителя запросов Hibernate:

SELECT *
FROM Livraison
WHERE /* restrictions on the Livraison entity */
AND EXISTS (
    SELECT id
    FROM ArticleLivre
    JOIN Article ON ArticleLivre.id.article = article.id
    WHERE ArticleLivre.id.livraison = Livraison.id
      /* AND restrictions on the Article entity */
  )

Я использую Hibernate 4.3.10 с Java 10 и PostgreSQL 9.1.9

Пока мой код выглядит так:

Criteria search = session.createCriteria(Livraison.class);
DetachedCriteria articlesLivres = DetachedCriteria.forClass(ArticleLivre.class);
livraisonRestrictions.forEach(search::add);
articlesLivres.add(Restrictions.eqProperty("ArticleLivre.id.livraison", "Livraison.id"));
DetachedCriteria articles = articlesLivres.createCriteria("id.article");
articlesRestrictions.forEach(articles::add);
search.add(Subqueries.exists(articlesLivres.setProjection(Projections.property("ArtileLivre.rang"))));
List livraison = search.list();

Когда я запускаю этот код, у меня появляется эта ошибка: org.hibernate.QueryException: could not resolve property: ArtileLivre.rang of: core.ArticleLivre.

Iне понимаю, как исправить эту ошибку.

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