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