问题:
1) 如果我从 Hibernate 4.x 升级到 Hibernate 5.x,我是否仍然可以使用“旧”条件查询,或者只能使用新的Typed JPA2 条件查询?旧的是否已弃用,或者我可以同时使用两者吗?
2) 我是否正确理解新的类型化标准迫使我为我拥有的每个 实体类创建第二个类,从而重复类的数量?我应该手动创建这些类吗?如果没有,怎么办?咆哮:必须复制类(class)似乎很奇怪,所以我一定是误解了它?这不是矫枉过正和不必要的复杂吗?
最佳答案
不,旧标准 API 并未弃用。看看the javadoc : 没有弃用警告。但我建议坚持使用标准 JPA API,而不是将标准 JPA API 与专有 Hibernate API 混合使用。
不,它不会强制你。您仍然可以使用字符串标识符。但是如果类型安全是目标,强烈建议使用元模型类。
当然,您不需要手动生成这些。它们由 an annotation processor 生成,来自您的实体类及其映射注释。您可能会觉得这很奇怪,但是使用 root.get(MyEntity_.firstName)
比 root.get("firstName")
更安全:在编译时检测到拼写错误时间,并且如果您将该字段重构为 firstname
,编译器将生成一个错误,而不是让您使用旧的 "firstName"
字符串标识符。
不过,我仍然发现 JPQL 查询的编写、理解和维护要简单得多,并且只有在必须基于多个...标准生成动态查询时才会使用标准 API。使用自动化测试来检查查询是否正确。做同样的事情,即使是标准查询,顺便说一句。
关于java - Hibernate 5 和类型化条件查询 (JPA2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35824417/