恐怕您可能误解了概念。您基本上不是在寻找 Hibernate 的替代品,而是寻找 ORM 的替代品。
Hibernate 是正确 ORM的极少数尝试之一。Hibernate 试图解决大多数对象/关系不匹配的范例。那些是:
- 粒度问题
- 亚型问题
- 身份问题
- 与协会有关的问题
- 数据导航问题
有关更多信息,请参阅使用 Hibernate 的 Java 持久性。
综上所述,没有更轻量级的 ORM。要么有合适的 ORM 解决方案,要么有其他解决方案——比如 myBatis,其中不是将关系模型映射到对象模型,而是将 SQL 语句映射到对象和方法。
并且不要忘记 - 您不必使用所有 Hibernate 功能。您可以轻松地将它与自定义 SQL、纯 JDBC 混合使用,并仅使用其功能的子集。
edit1:关于慢启动
间奏曲:我目前正在使用一种专有的 ORM 解决方案(不像 Hibernate 那样聪明),它专门针对我们的应用程序进行了调整。最大的问题也是启动,这是因为将整个数据库映射到对象并非易事。
现在,至于休眠。也许你知道,Hibernate 在启动时也会生成 CRUD SQL 语句。如果您有大型数据库,这可能会影响性能。但是,您可以关闭此启动 SQL 生成并切换到运行时生成的动态语句。
使用 XML 表示法,可以这样实现:
<class name="SomeClass"
dynamic-insert="true"
dynamic-update="true">
...
</class>
或者使用 Hibernate 注释:
@Entity
@org.hibernate.annotations.Entity(
dynamicInsert = true, dynamicUpdate = true
)
public class SomeClass { ...
edit2:关于混合自定义 SQL
参考书 Java Persistence with Hibernate 相当深入地解释了一些事情。第 8 章是关于使用遗留数据库的,它还提供了如何更改 DML 的提示(就像使用自定义 SQL,你甚至可以用自定义 SQL 替换 CRUD 代码!)和 DDL(通用运行时 DDL 操作)。你应该在那里偷看:)