在对象本身

时间:2017-05-23 16:20:43

标签: java hibernate

我有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")

1 个答案:

答案 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()子实体时会加载。