I'm using ObjectDB as my JPA provider, and I'm facing an issue with inheritance. My classes are as follows:
@Entity
public class Item implements Serializable, Comparable<Item> {
boolean retired;
// other fields, getters, and setters
}
@Entity
@Inheritance
public class PharmaceuticalItem extends Item implements Serializable {
// ...
}
@Entity
@Inheritance
public class Vtm extends PharmaceuticalItem implements Serializable {
// ...
}
I have a JPQL query that looks like this:
String jpql = "Select vtm "
+ " from Vtm vtm "
+ " where vtm.retired=:ret "
+ " order by vtm.name";
When I try to run this query, I get the following error:
Error executing query: Field 'retired' is not found in type 'com.divudi.entity.pharmacy.Vtm'
The same code works fine with MySQL and EclipseLink, but not with ObjectDB. I've also tried using the @MappedSuperclass annotation instead of the @Inheritance annotation, but the issue persists.
@MappedSuperclass
public class Item implements Serializable, Comparable<Item> {
// ...
}
@MappedSuperclass
public class PharmaceuticalItem extends Item implements Serializable {
// ...
}
@Entity
public class Vtm extends PharmaceuticalItem implements Serializable {
// ...
}
Does anyone have any idea how to resolve this issue with ObjectDB?
Thanks in advance!
This is the method in abstract facade.
public List<T> findByJpql(String temSQL, Map<String, Object> parameters) {
System.out.println("findByJpql");
System.out.println("JPQL: " + temSQL);
System.out.println("Parameters: " + parameters);
TypedQuery<T> qry = getEntityManager().createQuery(temSQL, entityClass);
Set s = parameters.entrySet();
Iterator it = s.iterator();
while (it.hasNext()) {
Map.Entry m = (Map.Entry) it.next();
String pPara = (String) m.getKey();
if (m.getValue() instanceof Date) {
Date pVal = (Date) m.getValue();
qry.setParameter(pPara, pVal, TemporalType.DATE);
} else {
Object pVal = (Object) m.getValue();
qry.setParameter(pPara, pVal);
}
}
List<T> ts;
try {
ts = qry.getResultList();
System.out.println("Results found: " + ts.size());
} catch (Exception e) {
System.out.println("Error executing query: " + e.getMessage());
ts = new ArrayList<>();
}
return ts;
}
This is the method in the controller.
public String navigateToListAllVtms() {
System.out.println("navigateToListAllVtms");
String jpql = "Select vtm "
+ " from Vtm vtm "
+ " where vtm.retired=:ret "
+ " order by vtm.name";
System.out.println("JPQL: " + jpql);
Map<String, Object> m = new HashMap<>();
m.put("ret", false);
System.out.println("Parameters: " + m);
items = getFacade().findByJpql(jpql, m);
if (items == null) {
System.out.println("Items list is null");
} else {
System.out.println("Items list size: " + items.size());
for (Vtm item : items) {
System.out.println("Vtm: " + item);
}
}
return "/emr/reports/vtms?faces-redirect=true";
}