【发布时间】:2016-02-19 18:38:31
【问题描述】:
考虑以下模型
@Entity
// JPA and JAXB annotations here
public class Employee implements Serializable {
// other fields, annotations, stuffs
...
@ElementCollection(fetch = FetchType.LAZY,
targetClass = Address.class)
@CollectionTable(name = "employee_address",
schema = "hris",
joinColumns = @JoinColumn(name = "employee_id",
nullable = false,
referencedColumnName = "employee_id",
foreignKey = @ForeignKey(ConstraintMode.CONSTRAINT)))
protected Set<Address> addresses;
// setters, getters
...
}
@Embeddable
// JAXB annotations here
public class Address implements Serializable {
// fields, setters, getters
}
Address 类使用@Embeddable 注释进行注释,Employee 类具有addresses 的嵌入元素集合。元素集合的fetch 设置为FetchType.LAZY。现在,我想创建一个@NamedQuery,它会检索所有具有热切初始化地址的员工。知道基于 JPA 2.1 的 JOIN FETCH will only work with entity collections 使用 @OneToMany 或 @ManyToMany 注释,我将如何创建一个有效的 JPQL 查询,让我能够急切地检索嵌入的元素集合?
【问题讨论】:
-
您如何得出
join fetch仅适用于实体的结论?你试过了吗? -
@DraganBozanovic:根据文档,“FETCH JOIN 子句右侧引用的关联必须是属于作为查询结果返回的实体的关联。它是不允许为 FETCH JOIN 子句右侧引用的实体指定标识变量,因此对隐式获取的实体的引用不能出现在查询的其他地方。"
-
集合值路径必须解析为关联字段
-
好的,你试过了吗? :)
-
“集合值路径必须解析为关联字段。”为什么您认为嵌入式集合不被视为关联字段?无论如何,
[left] join fetch是 JPQL 中唯一为此目的而存在的东西,如果这能回答您的问题。