Java 在hibernate中添加一个懒惰的孩子

Java 在hibernate中添加一个懒惰的孩子,java,hibernate,spring-data,Java,Hibernate,Spring Data,要添加子对象而不获取它,但获取LazyInitializationException。 我的孩子是拥抱列表,所以不想只为了添加一个子对象而获取所有孩子 @Entity public class JobRunId{ @OneToMany(mappedBy = "jobRun", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List<JobStep> jobSteps = new ArrayList

要添加子对象而不获取它,但获取LazyInitializationException。 我的孩子是拥抱列表,所以不想只为了添加一个子对象而获取所有孩子

@Entity
public class JobRunId{
    @OneToMany(mappedBy = "jobRun", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<JobStep> jobSteps = new ArrayList<>();

    public void addStep(JobStep jobStep) {
        if (jobStep != null) {
            jobStep.setJobRun(this); 
            this.jobSteps.add(jobStep);// here getting LazyInitializationException
        }
    }
}

service class

jobRun = repository.findById(id);
//Dont want to do hibernate.initialize here as want to avoid fetch all 
 child records
JobStep jobStep = new JobStep();
//some jobStep status
jobRun.addStep(jobStep);//adding one step here to jobRun.getting error
@实体
公共类JobRunId{
@OneToMany(mappedBy=“jobRun”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
private List jobSteps=new ArrayList();
public void addStep(JobStep JobStep){
如果(作业步骤!=null){
jobStep.setJobRun(此);
this.jobSteps.add(jobStep);//此处获取LazyInitializationException
}
}
}
服务等级
jobRun=repository.findById(id);
//不想执行hibernate。在此处初始化,因为要避免获取所有
儿童档案
JobStep JobStep=新JobStep();
//某些作业步骤状态
jobRun.addStep(jobStep)//在此处向jobRun.getting错误添加一个步骤
有没有办法只添加一个子记录而不获取所有子记录

有没有办法只添加一个子记录而不获取所有子记录

考虑到要添加给定的
JobRunId
JobStep
实体,可以使用类似于查询的
joinfetch
指令。
JOIN-FETCH
指令指示Hibernate发出一个
internal-JOIN
以便将JobRunId与其JobStep一起获取。createQuery的外观类似:

选择js
来自JobStep js
加入fetch js.jobRunId
其中js.id=:jobId“
另一种方法是使用DTO投影,如果您不想修改实体,则使用DTO投影。基本上,它允许您获取较少的列


我不确定这种关系的确切细节以及你为什么要这样管理。这里有一篇好文章要读。希望这篇文章能给你解决问题的洞察力。

直接坚持你的作业步骤(即使用类似于
em.Persist(jobStep)
JobStepRepository.save(jobStep)


注意:jobStep实例应该有一个对JobRunId的引用,该引用已经被持久化了…

谢谢您的回复。但是join fetch还将获取所有我不想要的子对象,因为我的子对象超过1000条记录,并且只需添加一条记录,就不想获取所有记录。您能告诉我如何进行投影吗orks@Rohit考虑到您有
一对多
关系,但您也有
where
子句形式的过滤器。我用一篇文章更新了答案。