- 老派的休眠 - ManyToOne 很懒
- JPA - ManyToOne 很渴望
感谢上帝,在这两个 OneToMany 中都很懒。
休眠中是否有一个设置可以覆盖这个非常糟糕的设置?有太多人不断添加 ManyToOnes 而不将其设置为惰性(即他们忘记添加 FetchType.LAZY),从而导致大量不必要的连接,并且在某些情况下导致 6 个不需要的表被连接。
一切都应该是懒惰的,除非开发人员转向 JQL 急切地获取某些东西。这样就更加一致,并帮助开发人员在每次添加 ManyToOne 注释时避免犯这些错误
或者,在 hibernate 5.2 中,仍然可以使用 hibernate 注释吗?但随后我需要以某种方式从类路径中删除 JPA 注释,因为我担心它们会意外地回到我们身边(我们都是人类)。
我发现这篇很棒的文章比我更好地解释了如何一切都应该是懒惰的https://vladmihalcea.com/eager-fetching-is-a-code-smell/
谢谢,
院长
Hibernate(或任何其他框架)不可能区分注释属性的默认值和设置的相同值。
我的意思是在运行时@ManyToOne
and @ManyToOne(fetch = FetchType.EAGER)
完全相同。
但由于您无法更改运行时行为,因此您至少可以调整编译时间:您可以添加一个格子风格强制您的同事始终显式设置获取类型的规则(或任何类似的规则)。
检查样式示例:
<module name="RegexpSinglelineJava">
<property name="format" value="@(One|Many)ToOne(?!\([^)]*fetch)"/>
<property name="message" value="Please declare the fetch type (and use EAGER sparingly)"/>
<property name="ignoreComments" value="true"/>
</module>
如果在执行后未定义获取,则会添加编译时警告@OneToOne
or @ManyToOne
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)