java - 解决 Hibernate 的微妙之处

标签 java hibernate

我花了几天时间研究 Hibernate,并有几个关于它的小问题,这些问题本身并不值得搞乱,但我认为,综合起来,有助于深入了解 Hibernate 的整体运作方式:

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

提前致谢!

最佳答案

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

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

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

关于java - 解决 Hibernate 的微妙之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11142913/

相关文章:

java - Android mutableListof(pair(k,v) --> 如果我清除变量,pair 值为空,但我在clear() 之前添加 mutableListof...为什么会为空?

java - Spring MVC Controller 响应作为静态内容缓存在浏览器中

java - 使用 hibernate 将数据从文件上传到 mysql 时减少时间

java - ORA-00942: 表或 View 不存在 : 如何找到它正在谈论的表或 View

java - 如何在 IntelliJ Idea 中复制(克隆)选项卡?

java - String 类的 compareTo() 方法返回什么

java - 除了 Guice-no-aop,是什么让 Guice 无法在 Android 上运行?

java - Hibernate:避免集合的隐式初始化

java - 在 Hibernate/C3P0 中处理连接池耗尽并避免死锁

java - 要求用户在密码过期后更改密码,但不要在 session 期间更改