代码之家  ›  专栏  ›  技术社区  ›  Whimusical

如何利用Spring/JPA执行参数化查询而不引用实体

  •  1
  • Whimusical  · 技术社区  · 8 年前

    基本上,我正在寻找一种很好的机制

    @Query(value ="generateReport", nativeQuery = true)
    public void generateCSVReport(Path filename, UUID managerUuid);
    

    其中generateReport是一个参数化查询,位于 @EnableJpaRepositories(namedQueriesLocation = "classpath:/foo/bar/file.sql) 其中包括

    COPY ( SELECT * FROM foo) TO file WITH (FORMAT CSV)
    

    无需定义存储库。我确实试过了 JpaRepository<Void,Void> 但它不起作用

    1 回复  |  直到 8 年前
        1
  •  1
  •   Plog    8 年前

    如果没有任何实体连接到存储库,那么就不需要真正实现JpaRepository。。或者甚至是积垢积垢,因为在没有实体的情况下进行任何积垢操作是没有意义的。

    尝试实现基本接口 Repository<T, ID extends Serializable> 相反

    而且 Repository<Void, Void> 从那以后就不会工作了 Void 不扩展 Serializable 还因为Void不是托管类型(即它不是@实体)。

    使用Spring数据存储库来实现这一点,您必须创建一个空的虚拟实体才能传入。将其映射到您正在SQL中查询的foo表可能是有意义的:

    @Entity
    @Table(name = "foo")
    public class DummyEntity extends Serializable {
    
      //Blank
    }
    

    然后扩展 Repository<DummyEntity, Integer> . 这可能表明Spring数据repos并不是解决这个问题的最佳解决方案。