解决Hibernate的微妙之处

时间:2012-06-21 16:47:23

标签: java hibernate

我花了几天时间研究Hibernate并且有一些关于它的小问题,它们本身并不值得混乱,但我认为,总的来说,有助于深入了解Hibernate如何作为一个整体运行:

  • 要创建Hibernate实体,必须在hibernate.cfg.xml配置文件中添加对它的引用,以及将相应的POJO注释为@Entity。这感觉非常多余。为什么你只能使用注释而只是跳过XML条目?
  • Hibernate似乎对其Query API的参数绑定有很好的内置支持,但我看不到Criteria API的这些选项。是否可以使用Criteria个实例进行参数化:如果是,如何,如果不是,为什么?
  • 我看到很多L2(二级)缓存提供程序:EhCache,OSCache,SwarmCache等。是否可以编写自己的CacheProvider,将其抛出到ruuntime类路径并让Hibernate使用您自己的自行开发的缓存系统(就像SLF4J用记录器绑定一样)?

提前致谢!

1 个答案:

答案 0 :(得分:2)

  1. 因为它会强制Hibernate扫描类路径的所有类以发现带注释的类。并且因为您可能在类路径中有一些您不想在应用程序中使用的实体。或者您可能希望在会话工厂中使用某些实体,而在另一个实体中使用其他实体。或者甚至是两个独立会话工厂中的同一个实体。

  2. Criteria API具有直接绑定参数的方法:例如Restrictions.eq("someProperty", someValue);

  3. 当然可以编写自己的二级缓存,但您必须配置Hibernate才能使用它,就像对所有其他提供程序一样。删除类路径中的类是不够的。