I tried to drill down the problem to following simple example:
Address has a simple relation to Person which is derived from Employee ...
@javax.persistence.Entity public class Address { String street; Long id; Person person; public String getStreet() { return street; } public void setStreet(String value) { street = value; } @javax.persistence.Id public Long getId() { return id; } @javax.persistence.ManyToOne public Person getPerson() { return this.person; } public void setPerson(Person person) { this.person = person; } }
@javax.persistence.Entity @javax.persistence.Inheritance(strategy = javax.persistence.InheritanceType.JOINED) public class Person { String name; Long id; private java.util.Set<Address> address; public String getName() { return name; } public void setName(String value) { name = value; } @javax.persistence.Id public Long getId() { return id; } public void setId(Long value) { id = value; } @javax.persistence.OneToMany(mappedBy = "person") public java.util.Set<Address> getAddress() { return this.address; } public void setAddress(java.util.Set<Address> address) { this.address = address; } }
@javax.persistence.Entity public class Employee extends Person { Double salary; public Double getSalary() { return salary; } public void setSalary(java.lang.Double value) { salary = value; } }
SELECT A FROM Address A WHERE (A.street=streetName) AND (A.employee.salary>2000)
could not resolve property: employee
SELECT A FROM Address A WHERE (A.street=streetName) AND (A.person.salary>2000)