
Hibernate 和 JPA 出了什么问题
1个回答
展开全部
事实上,Hibernate是最高级的传统ORM解决方案之一。不管怎样,使用ORM的问题在于,它的设计初衷主要是依赖整个实体才能工作。另一方面,
关系型数据库提供了强大的组合、过滤和转换实体及它们的字段的能力。为了保留这些灵活性,Hibernate提供了各种特性来弥补这些差距。但是为了正确
的使用这些特性,你必须做很多抉择: XML还是注解,HQL还是criteria
API,懒装还是即使获取等等。Hibernate内部所做的工作,尤其是当它实际执行一次数据库连接时所做的事情并不总是简单明了的(如果你把日志级别
调到debug -
你就能看到它的复杂性)。当使用和配置恰当的时候,Hibernate也许能工作的很好,但是这需要花费很长时间去了解很多注意事项。尤其是,如果你对
Hibernate还不熟悉,那么学习曲线还是很陡峭的。
Hibernate 最缺少的是对编译期安全性的支持。在使用HQL和criteria API时,你都需要提供字符串化的属性名称甚至整个SQL语句 – 这使得每次数据模型的变更都成为一次冒险 – 这个问题只能通过外部的并且是费时的测试来解决。
相反的,Empire-db解决编译期安全性问题的方法是,基于Java对象模型定义提供一套类型安全的API。任何时候你修改了你的模型定义,你的
Java编译器就会明确的告诉你这次修改影响了哪些代码。这极大的提高了代码质量,并减少了测试的数量和耗时。附带的好处是你的编码效率也会提高,因为在
你构建动态查询时,你的IDE将会允许你浏览所有表、字段甚至SQL函数。
如你所知Empire-db不是一个ORM的解决方案。它明显关注模型化关系数据库在Java中的工作方式,而不是反过来。Empire-db是被动
的,不会干扰你的连接和传输处理——这让它易于集成和零配置。它不会自动解决对象引用,但是你选择的数据恰好是你所需要的,这一般指需求较少的情况。如果
你仍然需要其他,你可以简单地添加一些与getter相关的几行简单代码。这种情况——我们相信——只是很少的情况。
我们建议,如果你不是非常熟悉SQL,那么你需要储存并重新加载你的POJO。Hibernate或JPA实现可能是更好的选择。但是,如果你想有效利
用SQL,并在语句执行的时候要保持完全的控制,还想带来元数据访问和编译时安全的额外好处,那么你真的应该让Empire-db去试试。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询