Hibernate将返回的数据对象转换为包装类

时间:2014-04-15 13:27:10

标签: java hibernate

我正在研究我的第一个hibernate项目,遇到了一些设计问题。 由于我不希望从Hibernate返回我的DataObjects中的任何业务逻辑,并且不想为每个setter / getter使用业务逻辑管理器,所以我决定创建一个封装这些对象的包装类。 当使用criteria / hibernate查询时,我创建了一个ResultTransformer,它将hibernate DataObject转换为包装类。所以现在任何查询方法返回的所有对象都是“包装”类而不是DO。

但是现在我也想对My对象的子元素使用相同的逻辑。例如,以下对象:

public class BookDO{

     @OneToMany(fetch = FetchType.LAZY)
     protected List<ChapterDO> chapters;

     public ChapterDO getChapters(){ return chapters;}
}

getChapters方法(将由我的书管理器调用)将返回ChapterDO对象的实例,但我想要返回的是“包装”章节类的实例。 另外一个问题是,当我想添加章节时:

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,或者是否有某些内容可以让我这样做?

1 个答案:

答案 0 :(得分:0)

如果你正在使用包装纸, 是的,你需要&#34;解开&#34;通过在提交数据库之前将包装器的状态映射到实体。