JPA/Metamodel: Strange (inconsistent ?) example in Sun Docs

寵の児 提交于 2019-12-19 13:48:13

问题


In Sun Online resources, they provide son example about the usage of the Criteria/Metamodel API, but as far as I understand Java, it seems to be impossible to work:

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_ is a instance of class EntityType which doesn't define any attribute named owners or addresses.

They do define classes named Pet_ and Owner_ for the metamodel, but they importation here would create a conflict with the variable names ... Am I right?

__

(the question is also related to this one)


回答1:


This example is incorrect, the authors are mixing canonical static metamodel classes (generated) with classes obtained via the Metamodel API. They are supposed to use either the weakly typed API or the stronlgy typed generated classes, not both together. In their case, the Pet_ (which is an incredible bad naming choice and is misleading) indeed doesn't have any owners attribute. This should be reported, this part of the tutorial is misleading and wrong.

See also

  • Dynamic, typesafe queries in JPA 2.0


来源:https://stackoverflow.com/questions/3879743/jpa-metamodel-strange-inconsistent-example-in-sun-docs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!