sebastianb
Erfahrenes Mitglied
Hallo zusammen,
laut JPA2.0 Spezifikationen soll die Criteria API ja bekanntlich durch das statische bzw. dynamische Metamodel Typsicher sein.
Dynamisches Metamodell:
Statisches Metamodell:
Laut meiner Auffasung von Typsicherheit sollte doch eigentlich ein Compilefehler jeweils in der letzten Zeile auftreten, da ich versuche eine equals prüfung zwischen einen String und einem Integer zu machen.
Ein Blick in die Hibernate/JPA Sourcen zeigen, dass bei .equal folgende Methode aufgerufen wird
und da der zweite Parameter vom Typ Object ist, ist es nun klar warum kein Compilefehler auftritt aber wo ist dann hier bitte die Typsicherheit?
Hibernate Version: 3.6.0 Final
Gruß
Sebastian
laut JPA2.0 Spezifikationen soll die Criteria API ja bekanntlich durch das statische bzw. dynamische Metamodel Typsicher sein.
Dynamisches Metamodell:
Java:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Employee> c = cb.createQuery(Employee.class);
Root<Employee> emp = c.from(Employee.class);
EntityType<Employee> emp_ = em.getMetamodel().entity(Employee.class);
c.select(emp).where(cb.equal(emp.get(emp_.getSingularAttribute("name", String.class)), 1));
Statisches Metamodell:
Java:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Employee> c = cb.createQuery(Employee.class);
Root<Employee> emp = c.from(Employee.class);
c.select(emp).where(cb.equal(emp.get(Employee_.name), 1));
Laut meiner Auffasung von Typsicherheit sollte doch eigentlich ein Compilefehler jeweils in der letzten Zeile auftreten, da ich versuche eine equals prüfung zwischen einen String und einem Integer zu machen.
Ein Blick in die Hibernate/JPA Sourcen zeigen, dass bei .equal folgende Methode aufgerufen wird
Java:
public Predicate equal(Expression<?> x, Object y) {...}
Hibernate Version: 3.6.0 Final
Gruß
Sebastian
Zuletzt bearbeitet von einem Moderator: