Question

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)

Was it helpful?

Solution

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top