Многократные соединения выборки JQPL терпят неудачу с Hibernate - PullRequest
0 голосов
/ 25 сентября 2011

Используя Hibernate 3.6.7 и JPA 2, я не могу иметь два выборочных соединения в одном запросе. У сущности есть поле с собственной ссылкой, которое называется parent. localizedTexts является @ElementCollection типа Java Map. entity.getParent () имеет стратегию загрузки @ManyToOne с EAGER.

Вот как выглядит сущность:

@Entity
public class Entity extends BaseEntity {
    /* ... */

    @ManyToOne(fetch = FetchType.EAGER)
    public Entity getParent() {
        return parent;
    }

    @ElementCollection
    @MapKeyColumn(name = "language")
    @Column(name = "text")
    public Map<String, String> getLocalizedTexts() {
        return localizedTexts;
    }

    /* ... */
}

Работают следующие два запроса:

select e from Entity e join fetch e.parent.localizedTexts

select e from Entity e join fetch e.localizedTexts

Но это не работает:

select e from Entity e join fetch e.localizedTexts join fetch e.parent.localizedTexts 

Hibernate жалуется: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,collection join,fetch join,fetch non-lazy properties,classAlias=null,role=net.company.project.Entity.localizedTexts,tableName={none},tableAlias=localizedt3_,origin=null,columns={,className=null}}] [select e from net.company.project.Entity e join fetch e.localizedTexts join fetch e.parent.localizedTexts]

1 Ответ

0 голосов
/ 25 сентября 2011

Если вы хотите предварительно загрузить «родительские» ассоциации сущностей, а также родительскую ассоциацию «localizedTexts», вы должны объявить объединения, проходящие по дереву модели в правильном порядке:

select e from Entity e join fetch e.parent p joint fetch p.localizedTexts
...