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

14

Sun在线资源中,他们提供了一个关于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**);
Pet_EntityType类的一个实例,该类没有定义名为ownersaddresses的任何属性。
它们确实为元模型定义了名为Pet_Owner_的类,但在此处导入将与变量名产生冲突...我是对的吗?
(这个问题也与这个问题有关。)

同样没有 CriteriaQuery.join - Kalle Richter
1个回答

16

这个例子是错误的,作者混淆了通过元模型API获取的类和规范静态元模型类(生成的类)。他们应该只使用弱类型API或强类型生成的类之一,而不是同时混用。在他们的情况下,Pet_(这是一种极其糟糕的命名选择,并且具有误导性)确实没有任何owners属性。 应该报告此问题,本教程的这部分内容是具有误导性和错误的。

另请参阅


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接