Spring Data返回类型是抽象类或接口错误

时间:2019-02-12 15:04:15

标签: java spring-boot spring-data-jpa spring-data

我有一个愚蠢的问题。我不明白为什么我的使用Projections的Spring Data Repository方法会产生此编译错误。

我有一个存储库类

@Repository
public interface MyClassRepository extends JpaRepository<MyClass, Long> {
  Page<MyProjection> getResultsByParam(@Param("param") Long personId,
                                                 Pageable pageable, Sort sort);
}

和投影(我有一个大型的休眠连接对象,从中只需要几个字段)

public interface MyProjection {
  Type getType();

  Status getStatus();

  SubItem getDocument();

  interface SubItem {
    String getName();
  }
}

当我尝试从服务中调用方法时,会得到

error: The return type is an abstract class or interface. Provide a non abstract / non interface result type or a factory method.

我这样称呼服务为编译错误。

myClass.getResultsByParam(param, page, sort)

我很确定,这里确实有一些简单的错误...

1 个答案:

答案 0 :(得分:0)

Spring数据自动生成代码以实现该存储库接口。此代码将包含创建结果对象的代码。为了能够创建结果对象,该对象必须是可实例化的。不是抽象类和接口。

您必须将接口方法更改为类似

Page<MyProjectionImpl> getResultsByParam(@Param("param") Long personId,
                                             Pageable pageable, Sort sort);

其中MyProjectionImpl是一个@Entity,具有默认的构造函数和属性的getter / setter,因此Spring Data可以填充它们。