java - jpa 获取连接查询

标签 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 {
    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/

相关文章:

postgresql - JPA:生成非 pk 唯一且随机的字母数字值

JPA 将 List<Tuple> 转换为 List<myClass>

java - Hibernate 和 JPA 之间有什么区别?

java - 具有共享 key (MapsId)和延迟加载问题的 OneToOne

java - 广义列表作为方法的参数

java - JPS useBean 与 HashMap

java - 注解处理: how to change annotation target in Kotlin code?

java - 从 ArrayList 中选取随机 ImageButton 会引发 NullPointerException

java - jpa一对多复合主键映射

java - 如何在 JPA/Spring-Data JPA 中使用审计?