views:

35

answers:

1

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  A: 

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

Pascal Thivent
thanks, so I didn't get it totally wrong, but it doesn't help me for my main problem of the other question :)
Kevin
@Kevin: I didn't had time to try to reproduce your problem. Will see if I can make it this afternoon.
Pascal Thivent