当前位置: 首页 > 知识库问答 >
问题:

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

马清野
2023-03-14

我有个愚蠢的问题。我不明白为什么使用Projections的Spring数据存储库方法会产生这个编译错误。

我有一个存储库类

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

和投影(我有一个大的hibernate连接对象,我只想从中得到几个字段)

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个答案

年文柏
2023-03-14

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

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

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

其中MyProjectionImpl@Entity,它有一个默认的构造函数和属性的getters/setters,所以Spring数据可以填充它们。

 类似资料:
  • 在那里,我被告知接口和抽象类除了方法签名(名称、参数)和返回类型之外没有实现/方法体,所以通常我们写: 然而,我想知道我们能不能这样写: 因为它表明,当我们创建接口或抽象类时,返回类型可以在方法中

  • 在一次采访中,有人要求我说明什么时候选择接口类,什么时候选择抽象类,在什么条件下你将从这两个类中选择一个。我对界面做了分析,那就是... 接口是进行类型声明或定义多方合同的最佳选择。如果多个程序员在一个项目的不同模块中工作,他们仍然通过定义接口来使用彼此的API,而不是等待实际的实现就绪。 这在编码和开发方面给我们带来了很大的灵活性和速度。接口的使用还确保了最佳实践,如“为接口编程而不是实现”,并

  • 我想读关于抽象的文章,但读到不同的文章,我感到很困惑。 下面是我无法理解的问题: 1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案: 与此处解释的不同。 它们是相同的,只是不同的观点,就像这里解释的。 最后一个是抽象类用来实现抽象。 哪一个是真的?请举一个简单的例子。 2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。” 这是正确的吗

  • 接口描述了类的行为和功能,而不需要完成类的特定实现。 C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来指定的,如下所示:class Box { public: // 纯虚函数 virtual double getVolume() =

  • 我是java新手,我正在学习抽象课程,但我被困在了一个地方。 我想将不同的数据类型返回到,但我做不到。我确实在java中参考了抽象方法的不同返回类型,但没有提出这个问题,因为我在java方面的经验较少,因此我不明白该链接的solution.Please有人帮我解决这个问题。 密码 错误 测试.java:18: 错误: 联合不是抽象的, 不会覆盖抽象方法率对银行的兴趣() 类Union扩展Bank{

  • 只是延伸问题... 抽象类和接口中的相同方法 假设一个类实现了一个接口并扩展了一个抽象类,两者都有相同的方法(名称签名),但返回类型不同。现在,当我重写方法时,只有当我使返回类型与接口声明相同时,它才会编译。 另外,如果该方法在抽象类或接口中声明为private或final,会发生什么情况? **旁注。在一次采访中,爱因斯坦先生在这个问题上坚持了相当长的时间。有没有一个流行的场景,我们这样做,或者