JPA CriteriaBuilder联接不适用于集合
我有两个实体,一对多的关系。我正试图加入实体集合,但却不知道如何使用该框架。我总是使用hibernate的DetachedCriteria,但对我来说已经不是一个选项了,任何帮助都会很好JPA CriteriaBuilder联接不适用于集合,jpa,Jpa,我有两个实体,一对多的关系。我正试图加入实体集合,但却不知道如何使用该框架。我总是使用hibernate的DetachedCriteria,但对我来说已经不是一个选项了,任何帮助都会很好 @Entity @Table(name = "Project") public class Project implements Serializable { .... @OneToMany(cascade = CascadeType.ALL, mappedBy = "project") pri
@Entity
@Table(name = "Project")
public class Project implements Serializable {
....
@OneToMany(cascade = CascadeType.ALL, mappedBy = "project")
private Collection<WorkReport> workReportCollection;
....
@Data
@Entity
@Table(name = "work_report")
public class WorkReport implements Serializable {
@JoinColumn(name = "id_work_report", referencedColumnName = "id_work_report", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Project project;
@实体
@表(name=“项目”)
公共类项目实现可序列化{
....
@OneToMany(cascade=CascadeType.ALL,mappedBy=“项目”)
私人收藏;
....
@资料
@实体
@表(name=“工作报告”)
公共类WorkReport实现可序列化{
@JoinColumn(name=“id\u work\u report”,referencedColumnName=“id\u work\u report”,insertable=false,updateable=false)
@多通(可选=假)
私人项目;
我正试图像这样加入workReportCollection,但它总是抛出
LazyInit异常
当访问字段时
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Project> query = builder.createQuery(Project.class);
Root<Project> project = query.from(Project.class);
Predicate idPredicate = builder.equal(project.get("idProject"), idProject);
project.joinCollection("workReportCollection", JoinType.LEFT);
query.where(idPredicate);
TypedQuery<Project> q = em.createQuery(query);
return q.getSingleResult();
CriteriaBuilder=em.getCriteriaBuilder();
CriteriaQuery=builder.createQuery(Project.class);
根项目=query.from(project.class);
谓词idPredicate=builder.equal(project.get(“idProject”),idProject);
项目.joinCollection(“workReportCollection”,JoinType.LEFT);
查询。其中(idPredicate);
TypedQuery q=em.createQuery(查询);
返回q.getSingleResult();
唯一有效的方法是使用fetch而不是join,但它也会获取所有其他关联,这太多了
如何使用JPA CriteriaBuilder正确地编写联接?或者我应该使用带投影的获取吗?联接是正确的,但在访问集合时集合未初始化,这就是为什么会出现LazyInitException 您必须添加获取:
project.fetch("workReportCollection");
建议JPA在查询后初始化集合。hmm我已经使用了fetch,但我不知道两者之间的区别,所以我选择了join。或者我应该将join与fetch一起使用?那么join的意义是什么?你应该阅读文档来检查区别