java - Hibernate 5 和类型化条件查询 (JPA2)

标签 java hibernate jpa-2.0 criteria-api

问题:

1) 如果我从 Hibernate 4.x 升级到 Hibernate 5.x,我是否仍然可以使用“旧”条件查询,或者只能使用新的Typed JPA2 条件查询?旧的是否已弃用,或者我可以同时使用两者吗?

2) 我是否正确理解新的类型化标准迫使我为我拥有的每个 实体类创建第二个类,从而重复类的数量?我应该手动创建这些类吗?如果没有,怎么办?咆哮:必须复制类(class)似乎很奇怪,所以我一定是误解了它?这不是矫枉过正和不必要的复杂吗?

最佳答案

  1. 不,旧标准 API 并未弃用。看看the javadoc : 没有弃用警告。但我建议坚持使用标准 JPA API,而不是将标准 JPA API 与专有 Hibernate API 混合使用。

  2. 不,它不会强制你。您仍然可以使用字符串标识符。但是如果类型安全是目标,强烈建议使用元模型类。

当然,您不需要手动生成这些。它们由 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/

相关文章:

java - EasyMock 给出意想不到的结果,表示预期为 1,实际为 0

java - 哪个版本的 Hibernate 是独立的(不需要 JPA 实现)?

java - JPA2 唯一约束 : do I really need to flush?

java - JPA 标准教程

java - 如何在java中添加n小时

Java 字符串存储字节数组

java - Spring Boot-控制404未找到

java - Spring + Hibernate 多模块实现

java - 在没有 RequestMapping 的类中 Autowiring

datetime - 将日期时间列的日期部分与 NamedQuery 进行比较