Java 在hibernate中添加一个懒惰的孩子
要添加子对象而不获取它,但获取LazyInitializationException。 我的孩子是拥抱列表,所以不想只为了添加一个子对象而获取所有孩子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
@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
子句形式的过滤器。我用一篇文章更新了答案。