JPA Join Fetch一个具体的类

时间:2018-03-14 15:19:25

标签: java jpa

我正在使用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.如果有更好的设计解决方案。

1 个答案:

答案 0 :(得分:0)

在JPA 2.1中,您有where TREAT (animal AS Dog) d