2017-05-23 14 views
0

我有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", 
    [email protected](name="WORKER_ID", referencedColumnName="ID"), 
    [email protected](name="CAR_ID", referencedColumnName="ID")) 
public List<FinishedCar> getFinishedCar() { 
    return finishedCar; 
} 


@ManyToMany 
@JoinTable(
    name="car_worker", 
    [email protected](name="CAR_ID", referencedColumnName="ID"), 
    [email protected](name="WORKER_ID", referencedColumnName="ID")) 
@WhereJoinTable(clause = "worker_type = 2") 

回答

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()子實體會加載。

+0

我更新了我的原始問題與來自我的模型的映射。 問題是如果我添加級聯type.all以多對多的註釋,我得到以下錯誤: org.springframework.dao.InvalidDataAccessApiUsageException:傳遞給persist的分離實體:com.atlas.model.Monter; 如果我不使用級聯,那麼我可以將其保存到數據庫, – ImRaphael