JPA / Metamodel:Sun Docs中的奇怪(不一致?)示例
在Sun Online资源中 ,他们提供了关于Criteria / Metamodel API使用的儿子示例,但据我了解Java,似乎无法工作:
CriteriaQuery cq = cb.createQuery(Pet.class); Metamodel m = em.getMetamodel(); EntityType Pet_ = m.entity(Pet.class); EntityType Owner_ = m.entity(Owner.class); Root pet = cq.from(Pet.class); Join address = cq.join(**Pet_.owners**).join(**Owner_.addresses**);
Pet_
是EntityType
类的实例 ,它不定义任何名为owners
或addresses
属性。
他们确实为元模型定义了名为Pet_
和Owner_
类,但是在这里输入它们会与变量名称产生冲突……我是对的吗?
__
(这个问题也与这个问题有关)
这个例子是不正确的 ,作者正在将规范的静态元模型类 (生成)与通过Metamodel API获得的类混合。 它们应该使用弱类型API或stronlgy类型生成的类,而不是两者。 在他们的情况下, Pet_
(这是一个令人难以置信的错误命名选择并且具有误导性)确实没有任何owners
属性。 应该报告这一点,本教程的这一部分是误导和错误的。
也可以看看
- JPA 2.0中的动态,类型安全查询