我有以下实体层次结构:
A |-- B |-- C |-- D
B,C和D扩展了一个实体。在B和C中我有一个属性“name”,我想从A实体创建一个查询,但我想检索属性“name”(如果存在)。如果它不存在或属性具有null值,则应返回null。
据我所知,我可以使用jpa中的“treat”功能(我们使用的是eclipse链接2.5)。
我正在使用此查询:
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery query = cb.createQuery(A.class); Root root = query.from(A.class); Root rootB = cb.treat(root, B.class); Root rootC = cb.treat(root, C.class); Selection selection = cb.array( rootB.get("name"), rootC.get("name") ); CriteriaQuery where = query.select(selection); List resultList = em.createQuery(where).getResultList();
但生成的SQL不是预期的结果:
SELECT name, name FROM A WHERE ((DTYPE IN (?)) AND (DTYPE IN (?))))
创建此查询的最佳方法是什么?在我的真实场景中,有许多A的子类,所以我想避免对实体进行一次查询。
我知道我可以通过两个查询来检索实体A,查找其isInstanceOf并进行另一个查询。我想知道是否有办法只进行一次查询。
由于