这就是我的域名的样子:
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);
我的异常(exception):
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].
对创建这样的查询有什么想法吗?
最佳答案
您不能在 JPQL 中的联接获取上使用别名,这是规范所不允许的。
EclipseLink 确实允许通过查询提示进行嵌套连接获取,
"eclipselink.join-fetch"="t.fieldConfig.fieldSet"
关于java - jpa 获取连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8195252/