我为所有表编写了类,并使用hibernate完成了所有操作,例如应用约束,给出列名,使用@ManyToOne的所有映射以及其他映射注释等。
但我的高级说,我不应该这样做,它没用,所有这些映射都会产生大量的查询,我们应该为数据库操作保留一个单独的DBScript。
问题: 1)如果你必须只使用SQL做一切,我不明白hibernate的所有功能的用途是什么。我甚至不应该使用hbm2ddl.auto选项作为更新。
2)如何进行映射,以便hibernate创建最佳和最优化的查询。 (如何做到这一点的基本思想。)或者我不应该使用映射,只保留外键变量类型作为另一个类的主键类型。
答案 0 :(得分:1)
问题的答案在于性能,开发成本和速度,可靠性以及许多其他因素的平衡。例如,如果您正在使用直接sql查询映射而不是hibernate开发应用程序,那么您将收到快速应用程序,该可靠性基于jUnit测试(主要是),代码完整性(一致性)较差,并且当某些实体将执行时您将很难工作改变了。另一方面,当你使用hibernate时,你会得到高速和可靠性的开发,具有良好的代码完整性(只有jUnit测试才会增加),但是对数据库的非最佳查询的成本,有时你会认为有些数据提取使用sql然后jpa \ hibernate \ hql会更简单。我看到了混合变体,当用于数据提取本机sql时,但是用于持久化hibernate的数据。在这些问题和因素中经过几年的平衡之后,我们从架构中的hibernate \ jpa开始的每个新项目:成本是合理的!
答案 1 :(得分:0)
选择Hibernate的主要原因不是性能。 Hibernate用于通过允许您将Java类加载并保存到数据库而无需编写任何数据库代码来降低开发成本。这可以节省大量时间,因此无论谁付钱给您,都可以节省大笔资金。
Hibernate可以提高性能,因为它包含缓存,但我不会依赖它。任何试图告诉你它是性能问题的答案的人是卖东西或买了别人说的话。在某些情况下,它可能更快(如果缓存有助于防止重复查询),并且有些情况会更慢(如果您正在进行复杂的查询或更新,或者在Hibernate加载的数据超出您想要的情况下)。 / p>
就像外键或唯一键约束这样的东西:这些可以改善或阻碍性能。 FK约束可能需要在插入时进行验证,但在某些情况下,它可能允许查询优化器生成更好的查询计划。这取决于并且讨论所有超出问题范围的内容。你的大四学生真的必须知道他在说什么肯定地说。
我会问这个:
数据库性能是否可能是您系统的问题?
如果不是,那么继续使用Hibernate并添加您喜欢的所有功能约束,因为它们可能会确保您的程序正常工作,这是最重要的事情。
如果性能可能从一开始就是一个问题,那么您真的需要让数据库专家来设计您的架构和您的查询时考虑到性能。这并不排除使用Hibernate,但您必须更仔细地考虑如何创建Java类,因为它们会影响ORM生成的查询。