使用Spring JPA Repository和hibernate多态加载子类

时间:2015-10-27 13:37:20

标签: spring hibernate inheritance polymorphism repository

我有一个Superclass Fruit和3个子类Apple,Pear和Banana。我有3个子类的3个Spring数据CrudRepositories。

Fruit是一个使用@Entity和@Inheritance注释的抽象超类(strategy = InheritanceType.TABLE_PER_CLASS)

我有一个FruitRepository,其中包含以下方法:

@Query(value=""
        + "(SELECT * FROM Apple where assignedTo_guid = :guid )"
        + "UNION"
        + "(SELECT * FROM Pear where assignedTo_guid = :guid )"
        + "UNION"
        + "(SELECT * FROM Banana where assignedTo_guid = :guid )", nativeQuery=true)            
List<Fruit> getFruitEntitiesForMasterRef(@Param("guid") Long guid);

基本上我想查询所有的水果子类表,然后返回一个超类列表。目前,这会引发以下异常:java.sql.SQLException:Column&#39; clazz _&#39;没找到。

是否可以使用Spring Repositories或Hibernate执行此操作?

1 个答案:

答案 0 :(得分:0)

为什么不让你休眠来为你做这个?我的意思是,如果您创建条件或HQL来检索Fruit中的所有List<Fruit>个对象,hibernate可以为您提供包含所有子类的列表。

然后,如果您想对水果列表的每个元素进行特殊处理,您可以使用访客模式。

我不会使用本机查询来执行此操作,hibernate知道如何管理这种情况。