我正在使用JPA和HIbernate,我有以下数据结构:
public class House {
@ID
Long id;
@OneToMany(mappedBy = "House")
private final List<Animal> animalList = new ArrayList<>();
List<Dog> getDog () { return animalList.stream()
.filter(Dog.class::isInstance).map(Dog.class::cast)
.collect(Collectors.toList());
}
public abstract class Animal {
@ManyToOne
private House house;
}
public class Dog extends Animal {
String ball;
}
我想执行类似的JPAQuery:
select h.address, d.ball from House h join fetch h.animalList d where h.id = :id
你可能已经注意到h.animalList正在返回类型为Animal的对象。因此不允许使用d.ball。但是,我知道他们是狗。 我在问: 1.是否有办法在查询中强制转换而不必更改数据结构。 2.如果有更好的设计解决方案。
答案 0 :(得分:0)
在JPA 2.1中,您有where TREAT (animal AS Dog) d