我有ManyToMany
映射,我映射Car
模型和Monter
模型,我让它们保存到数据库并且工作正常,但是当我检索我的汽车对象时我可以不能访问我的集合,因为我得到了延迟加载错误。
这是我的服务Impl:
@Override
public List<FinishedCar> finishedCarList() {
return finishedCarDao.findAll() ;
}
现在我读到某个地方我可以使用fetchType.Eager
,但由于某种原因,这在我的情况下不起作用,所以我找到了Hibernate.initialize()
方法,但我不知道如何(或更好) )在哪里使用它?
我应该在服务层中使用hibernate.initialize()
方法吗?还是道?以及如何加载我的收藏而不会出现延迟加载错误。此外,这是否意味着在对象车的每个实例上我都必须使用hibernate.initialize()
我使用car.getMonterMain()
在汽车类中调用我的getter
。
@ManyToMany
@JoinTable(
name="car_worker",
joinColumns=@JoinColumn(name="WORKER_ID", referencedColumnName="ID"),
inverseJoinColumns=@JoinColumn(name="CAR_ID", referencedColumnName="ID"))
public List<FinishedCar> getFinishedCar() {
return finishedCar;
}
@ManyToMany
@JoinTable(
name="car_worker",
joinColumns=@JoinColumn(name="CAR_ID", referencedColumnName="ID"),
inverseJoinColumns=@JoinColumn(name="WORKER_ID", referencedColumnName="ID"))
@WhereJoinTable(clause = "worker_type = 2")
答案 0 :(得分:0)
您需要使用cascade
来存储子对象,并使用FetchType.LAZY
来获取具有父实体的子对象:
@OneToMany(mappedBy = "FOrd", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<FOrdItem> FOrdItems;
在DAO中你必须在子对象上使用.size()
方法:
fOrd.getFOrdItems().size();
fOrd
是父实体,getFOrdItems()
是获取子(FOrdItems)。
当你使用.size()
子实体时会加载。