JPA/Metamodel: Strange (inconsistent ?) example in

2019-02-21 13:42发布

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条回答
兄弟一词,经得起流年.
2楼-- · 2019-02-21 14:43

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

查看更多
登录 后发表回答