JPA: запрос встраиваемого списка внутри объекта - PullRequest
3 голосов
/ 04 февраля 2012

Я пытаюсь «извлечь» встраиваемые классы на основе некоторых критериев из списка в сущности. Либо с помощью JPQL или Criteria API. Я не профессионал в этом, поэтому, пожалуйста, помогите мне. Погуглил 4 часа безотказно за ответ.

Это классы:

@Entity
public class PostOffice {

    @Id
    private Long id;

    @ElementCollection(fetch=FetchType.LAZY)
    @CollectionTable(joinColumns=@JoinColumn(name = "CARRIERID"))
    private List<PostalCarrier> carriers;

}


@Embeddable
public class PostalCarrier {

    @JoinColumn(name = "area")
    private Area area;

} 


@Entity
public class Area {

    @Id
    private int code;
}

Итак, в основном я пытаюсь достичь чего-то вроде этого.

TypedQuery<PostalCarrier> query = entityManager.createQuery("SELECT p.carriers FROM PostOffice p 
WHERE p.id = ?1 AND p.carriers.area.code = ?2", PostalCarrier.class);

    query.setParameter(1, postOfficeId);
    query.setParameter(2, areaCode);

Я хочу получить список только почтовых операторов с определенным кодом города из определенного PostOffice. Любая помощь высоко ценится! :)


Я думаю, что я почти у цели, но продолжаю получать следующую ошибку:

 Error compiling the query [SELECT h FROM PostOffice p INNER JOIN p.carriers h 
 WHERE p.id = ?1 AND h.area.code = ?2], line 1, column 71: unknown state or 
 association field [area] of class [com.test.PostalCarrier].

1 Ответ

2 голосов
/ 04 февраля 2012

Вы должны присоединиться к Почтовому перевозчику. Вы не можете получить доступ к собственности из коллекции. Таким образом, postalcarrier.area не правильно.

select postalcarrier from PostOffice p
inner join p.carriers postalcarrier
where p.id = :postOfficeId
and postalcarrier.area.code = :areaCode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...