jpa получить запрос на присоединение - PullRequest
2 голосов
/ 19 ноября 2011

Вот так выглядит мой домен:

public class Template implements Serializable {
    private static final long serialVersionUID = 1L;    
    @OneToOne(cascade=CascadeType.ALL)
    private FieldConfig fieldConfig;
}

public class FieldConfig implements Serializable {
    private static final long serialVersionUID = 1L;

    @OneToMany(cascade= CascadeType.PERSIST)
    @JoinColumn(name = "fieldConfigId")
    private Set<Field> fieldSet;
}

Я хочу добиться, если я загружу шаблон из БД, который автоматически загружает fieldConfig и fieldSet этого fieldconfig.

мой текущий JPQL:

TypedQuery<Template> query = em.createQuery("SELECT t from Template t LEFT JOIN FETCH t.fieldConfig"
                + " fconfig LEFT JOIN FETCH fconfig.fieldSet where t.id = :id", Template.class);

мое исключение:

Internal Exception: NoViableAltException(80@[()* loopback of 477:9: (node= join )*])
Exception Description: Syntax error parsing the query [SELECT t from Template t LEFT JOIN FETCH t.fieldConfig fconfig LEFT JOIN FETCH fconfig.fieldSet where t.id = :id], line 1, column 55: unexpected token [fconfig].

Есть мысли по созданию такого запроса?

1 Ответ

3 голосов
/ 21 ноября 2011

Вы не можете использовать псевдоним для выборки соединения в JPQL, это запрещено спецификацией.

EclipseLink разрешает вложенную выборку соединения через подсказку запроса,

"eclipselink.join-fetch"="t.fieldConfig.fieldSet"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...