Hibernate的好处而不仅仅是基于db表和sprocs生成的DAL?

时间:2010-09-27 19:33:21

标签: java hibernate

Hibernate比基于db表和sprocs生成的DAL有什么好处?

即。编写或使用工具为数据访问层生成代码而不是使用hibernate

2 个答案:

答案 0 :(得分:1)

  1. hibernate实体是可以封装业务逻辑的常规POJO,如果数据库模式发生变化,则可以调整实体,不需要重新生成它们。
  2. 获取实体并持久化它们的代码(hibernate-core)被广泛使用,并且在许多不同的框架中都有支持。
  3. 其他功能,如事务管理,基于java构建器的查询语言和许多其他功能已经包含在hibernate中,如果这些功能是你觉得有用的东西,那么你就可以开箱即用了
  4. 最大的缺点是你会失去细粒度的控制,所以看看Hibernate在介入之前做了你需要它做的所有事情的程度......同样,学习hibernate还需要很长时间,而且很多怪癖,你不会开始使用hibernate,并在同一周成为它的主人...我已经使用它超过一年仍然有偶尔难以找到的问题

答案 1 :(得分:1)

我使用Hibernate并对ant中的模型和DAO进行逆向工程。 ant任务通过查看数据库来生成它们。它工作得很好。随着项目的继续,数据库表的更改通常会破坏Hibernate模型。我们只是重新设计模型,我们很高兴。

如果你按照自己的方式进行Hibernate并且坚持使用常见的SQL结构。我刚刚使用Hibernate完成了两个相当大的项目。 Hibernate没有造成任何困难。如果你必须做一些花哨的查询,虽然经验丰富的Hibernater可能不需要,但使用SQL很容易。

你还能以非常自然的方式获得爬行课程的能力,这也很好。

例如,如果调查有很多问题,而问题有一个答案,您可以说

Survey survey = SurveyDAO.get(entityManager, 1L); // 1 is the PK
List<Question> questions = survey.getQuestions();
for(Question question: questions) {
    Answer answer = question.getAnswer();
    System.out.println("Question "+ a.getQuestionNumber()+" = "+answer.getText());
}

这种关系也是另一回事。如果我们有问题,我们可以进行调查:

Survey s = someQuestion.getSurvey();
List<Questions> q = s.getQuestions();

因此,如果知道一个问题,很容易在调查中得到所有问题。

要完成所有我们不必将任何Hibernate代码写入SurveyDAO.get()以外的代码。真的很容易。