Java jpa获取连接查询
这就是我的域名的外观:Java jpa获取连接查询,java,jpa,jpa-2.0,jpql,Java,Jpa,Jpa 2.0,Jpql,这就是我的域名的外观: public class Template implements Serializable { private static final long serialVersionUID = 1L; @OneToOne(cascade=CascadeType.ALL) private FieldConfig fieldConfig; } public class FieldConfig implements Serializable {
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;
}
创建这样的查询有什么想法吗?您不能在JPQL中的连接获取中使用别名,规范不允许这样做 EclipseLink允许通过查询提示进行嵌套联接获取
"eclipselink.join-fetch"="t.fieldConfig.fieldSet"
@Template
和@FieldConfig
是否在描述符中注释为实体或配置为实体?当然,为了可读性,我没有包括这些:)我认为查询是正确的。你的JPA引擎是什么?您是否尝试过使用AS-fconfig来查看它是否有所不同?我正在使用EclipseLink,尝试添加AS-got=>Exception Description:语法错误解析查询[SELECT t from Template t LEFT JOIN FETCH t.fieldConfig AS fconfig LEFT JOIN FETCH fconfig.fieldSet where t.id=:id],第1行,第55列:意外标记[AS]。请参阅TypedQuery query=em.createQuery(“从模板t中选择t加入获取t.fieldConfig”+“加入获取t.theme”+“加入获取t.dataConfig”+“加入t.fieldConfig.fieldSet fs”+“加入t.dataConfig.textSet,其中t.id=:id”,Template.class);query.setParameter(“id”,id);setHint(QueryHints.FETCH,“t.fieldConfig.fieldSet”);setHint(QueryHints.FETCH,“t.dataConfig.textSet”);返回query.getSingleResult();
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].
"eclipselink.join-fetch"="t.fieldConfig.fieldSet"