我花了几天时间研究 Hibernate,并有几个关于它的小问题,这些问题本身并不值得搞乱,但我认为,综合起来,有助于深入了解 Hibernate 的整体运作方式:
- 要创建 Hibernate 实体,必须在
hibernate.cfg.xml
配置文件中添加对它的引用以及将相应的 POJO 注释为@Entity
。这感觉非常多余。为什么可以只使用注释并跳过 XML 条目? - Hibernate 似乎对其
Query
API 的参数绑定(bind)有很好的内置支持,但我没有看到Criteria
API 的此类选项。是否可以使用Criteria
实例进行参数化:如果可以,如何实现,如果不能,为什么? - 我看到很多 L2(二级)缓存提供程序:EhCache、OSCache、SwarmCache 等。是否可以编写自己的
CacheProvider
,将其扔到运行时类路径上并让 Hibernate 使用您自己的自行开发的缓存系统(就像 SLF4J 对记录器绑定(bind)所做的那样)?
提前致谢!
最佳答案
因为它会强制 Hibernate 扫描类路径的所有类以发现带注释的类。因为类路径中可能有一些您不想在应用程序中使用的实体。或者您可能希望在 session 工厂中拥有一些实体,而在另一个 session 工厂中拥有其他一些实体。或者甚至是两个单独的 session 工厂中的同一实体。
Criteria API 具有直接绑定(bind)参数的方法:例如
Restrictions.eq("someProperty", someValue);
。当然可以编写自己的二级缓存,但您必须配置 Hibernate 才能使用它,就像使用所有其他提供程序一样。仅将类删除到类路径中是不够的。
关于java - 解决 Hibernate 的微妙之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11142913/