我目前正在研究我的第一個hibernate項目,遇到了一些設計問題。 因爲我不希望任何業務邏輯在我的DataObjects從Hibernate返回並且不想爲每個setter/getter使用業務邏輯管理器,所以我決定創建一個封裝這些對象的封裝類。 當使用條件/休眠查詢時,我創建了一個ResultTransformer
,它將把hibernate的數據對象轉換成包裝類。所以現在,任何查詢方法返回的所有對象都是「包裝」類,而不是DO。Hibernate將返回的數據對象轉換爲包裝類
但是現在我也想對我的對象的孩子使用相同的邏輯。舉個例子以下對象:ChapterDO對象的
public class BookDO{
@OneToMany(fetch = FetchType.LAZY)
protected List<ChapterDO> chapters;
public ChapterDO getChapters(){ return chapters;}
}
的getChapters方法(將我的書的經理叫)將返回我的情況,但我想回到什麼是「包裝」章類的實例。 一個額外的問題是,當我想添加一個章節:
public class BookDO{
public void addChapter(ChapterDO chapter)
{
chapters.add(chapter)
}
}
public class BookManager()
{
public void addChapter(Chapter chapter)
{
bookDOObject.add(chapter);
}
}
但是,這將失敗,因爲這本書經理只能訪問到包裝對象,所以我會「解包」吧。我很猶豫,只是添加getChapterDo()方法的包裝,因爲我覺得這將是一個「黑客」。
所以我想知道什麼是處理這種情況的最佳方法是?我需要創建於經理層unwrappers/wrappers
或者是有什麼在休眠,讓我做到這一點?