JPA/Metamodel:Sun Docs中的奇怪(不一致?)示例

Kev*_*vin 11 java jpa criteria-api metamodel jpa-2.0

Sun Online资源中,他们提供了关于Criteria/Metamodel API使用的儿子示例,但据我了解Java,似乎无法工作:

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Metamodel m = em.getMetamodel();
EntityType<Pet> Pet_ = m.entity(Pet.class);
EntityType<Owner> Owner_ = m.entity(Owner.class);

Root<Pet> pet = cq.from(Pet.class);
Join<Owner, Address> address = cq.join(**Pet_.owners**).join(**Owner_.addresses**);
Run Code Online (Sandbox Code Playgroud)

Pet_是一个类的实例, EntityType没有定义任何名为owners或的属性addresses.

他们确实定义了名为Pet_Owner_元模型的类,但是在这里输入它们会产生与变量名称的冲突......我是对的吗?

__

(这个问题也与此相关的一个)

Pas*_*ent 12

这个例子是不正确的,作者正在将规范的静态元模型类(生成)与通过Metamodel API获得的混合在一起.它们应该使用弱类型API或stronlgy类型生成的类,而不是两者.在他们的情况下,Pet_(这是一个令人难以置信的错误命名选择并且具有误导性)确实没有任何owners属性.应该报告这一点,本教程的这一部分是误导和错误的.

也可以看看