2015-02-25 3 views
2

У меня есть три объекта. Пользователь (родительский)Запрос наследования наследования объекта Querydsl с соединением

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name = "user_type") 
@Table(name = "userinfo") 
@SequenceGenerator(name = "userInfoUserIdSeq", initialValue = 1, allocationSize = 100, sequenceName = "userinfo_user_id_seq") 
public abstract class UserInfo { 

public static final String EDITOR = "E"; 
public static final String TALENT = "T"; 

@Id 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "userInfoUserIdSeq") 
@Column(name = "user_id") 
private Long id; 
... 

Editor (ребенок)

@Entity 
@DiscriminatorValue(UserInfo.EDITOR) 
@Table(name = "editors") 
public class Editor extends UserInfo { .... 

Журналист (ребенок)

@Entity 
@DiscriminatorValue(UserInfo.TALENT) 
@Table(name = "talent") 
public class Talent extends UserInfo { ..... 

У меня есть следующий запрос, который не работает, написано на querydsl

QUserInfo userInfo = QUserInfo.userInfo; 
    text = "%" + text + "%"; 
    QTalent talent = QTalent.talent; 
    QEditor editor = QEditor.editor; 
    SearchResults<UserInfo> results = query.from(userInfo).leftJoin(userInfo, talent._super) 
      .leftJoin(userInfo, editor._super).where(..... 

У меня есть следующая команда stacktr Туз:

 at   com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:127) 
    at com.mysema.query.jpa.impl.AbstractJPAQuery.listResults(AbstractJPAQuery.java:261) 
    at com.washpost.talent.dao.implementation.UserInfoDaoImpl.findAllUsersByNamesAndEmails(UserInfoDaoImpl.java:33) 
    ... 113 more 
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select count(userInfo) 
from com.washpost.talent.model.UserInfo userInfo 
    left join treat(userInfo as Talent) as talent 
    left join treat(userInfo as Editor) as editor 
where .... 

Я не могу понять, почему мой присоединяется не работает

+0

Поскольку запрос является проблемой, было бы неплохо, если бы вы включили его целиком – Zielu

+0

Какую информацию вы пытаетесь извлечь? –

ответ

0

Не могу сказать, не видя запроса в целом.

Но обычно вы не присоединяетесь к таблицам наследования в JPA. Если вы хотите, чтобы все пользователи (включая журналистов, редакторов ...), вы просто запускали Select U from User u.

Если вам нужны только журналисты, которых вы запрашиваете: select u From Journalist U;

JPA будет перевести его на стыки при необходимости (так что вы можете изменить тип наследования для одной таблицы, и ваши запросы будут по-прежнему работать)

0

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

Смежные вопросы