2016-03-06 107 views
7

问题:休眠5和类型化标准的查询(JPA2)

1)如果我从休眠4.x版升级到Hibernate 5.x的,我还可以使用“旧”的标准查询,或者只有新键入 JPA2条件查询?旧的是不推荐的,还是可以并排使用?

2)我是否正确理解新的输入条件迫使我创建第二个类每个实体类我有,从而重复类的数量?我应该手动创建这些类吗?如果没有,如何? Rant:不得不复制课程看起来很奇怪,所以我必须以某种方式误解它?这不是过度杀伤和不必要的复杂吗?

回答

10
  1. 不,旧标准API不被弃用。只需看看the javadoc:不存在弃用警告。但我会建议坚持使用标准的JPA API,而不是使用与专有Hibernate API混合的标准JPA API。

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

当然,你不需要手动生成这些。它们由an annotation processor生成,来自您的实体类及其映射注释。您可能会发现它很奇怪,但使用root.get(MyEntity_.firstName)root.get("firstName")更安全:在编译时检测到错字,并且如果将该字段重构为firstname,编译器将生成一个错误,而不是让您使用旧的"firstName"字符串标识符。

虽然我仍然发现JPQL查询的编写,理解和维护要简单得多,并且只有在基于多个条件生成动态查询时才会使用条件API。使用自动化测试来检查查询是否正确。即使使用标准查询,也要这样做,顺便说一句。

+0

如果您将字段重构为名字,编译器是否会生成错误,或者注释处理器是否也会立即将MyEntity_.firstName更改为MyEntity_.newName,以便我不会收到任何错误? – MarcG

+0

注释处理器会将MyEntity_.firstName更改为MyEntity_.newName,并因此在您使用MyEntity_.firstName的代码中的所有位置出现编译错误。 –

+2

是的,当然,因为注释处理器没有通过IDE进行重构。 Jeez我真的很讨厌这个新标准。正如你所建议的那样,我们的自动化测试已经可以立即捕捉到任何字符串标识符错误,所以我没有看到这一点。旧的Hibernate标准的可读性要好得多,这对我们来说最重要。谢谢(你的)信息。 – MarcG