【发布时间】:2012-01-01 23:23:13
【问题描述】:
这是我的域的外观:
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 和该 fieldconfig 的 fieldSet,我想实现。
我目前的 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].
对创建这样的查询有什么想法吗?
【问题讨论】:
-
@Template和@FieldConfig是否在描述符中被注释为实体或配置? -
是的,当然,为了便于阅读,我没有包括它 :)
-
这个查询对我来说是正确的。你的 JPA 引擎是什么?您是否尝试过使用 AS fconfig 来查看它是否有所作为?
-
我正在使用 EclipseLink,尝试添加 AS got => 异常描述:语法错误解析查询 [SELECT t from Template t LEFT JOIN FETCH t.fieldConfig AS fconfig LEFT JOIN FETCH fconfig.fieldSet where t .id = :id],第 1 行,第 55 列:意外令牌 [AS]。