Java EclipseLink获取组获取继承属性

Java EclipseLink获取组获取继承属性,java,jpa,eclipselink,Java,Jpa,Eclipselink,当您正在获取的实体具有对抽象类的引用,但您希望获取仅属于一个可能的继承类的属性时,是否可以使用FetchGroup 例如 宠物有一个主人(主人是一个抽象类),主人可以是人或庇护所。一个人有一个属性。。。比如说年龄,我希望如此 public Pet findPetSlim(Integer id) { Pet result = null; FetchGroup group = new FetchGroup("PetSlim"); group.addAttribute("id");

当您正在获取的实体具有对抽象类的引用,但您希望获取仅属于一个可能的继承类的属性时,是否可以使用FetchGroup

例如

宠物有一个主人(主人是一个抽象类),主人可以是人或庇护所。一个人有一个属性。。。比如说年龄,我希望如此

public Pet findPetSlim(Integer id) {
   Pet result = null;
   FetchGroup group = new FetchGroup("PetSlim");
   group.addAttribute("id");
   group.addAttribute("owner.age");  //this will not work because owner doesn't have age
   Query q = getEntityManager().createQuery("Select p from Pet p where p.id = :id").setParameter("id", id);
   q.setHint(QueryHints.FETCH_GROUP, group);
   result = (Pet) q.getSingleResult();
   return (result);
}

你希望从避难所得到什么?为什么不只是查询主人是人的宠物,比如JPA2.1中的“从宠物中选择p加入治疗(p.owner AS Person)Person,其中p.id=:id”,或者使用只返回数据的查询,而不是像“从Person owner中选择Pet.id、owner.age、Pet-Pet-where-Pet.id=:id和Pet.owner=owner”这样的实体。你也可以根据需要使用第二个查询返回带有fetchGroup的实体。我不能只拉主人是个人的宠物,我需要所有宠物。稍后,如果主人是个人,我需要年龄。你可能会说,为什么不直接拉整个所有者,因为所有者非常复杂,有很多双向关系,这会导致性能问题。因为我认为这是不可能的,所以我继续添加了另一个查询,如果所有者是个人,则需要年龄。我试图限制查询的数量,因为这个额外的查询将是一个远程接口调用=(