java - Spring 数据存储库在未映射的 POJO 上具有 native 命名查询

标签 java spring-data-jpa

我有一个名为company的POJO,它映射到名为company的数据库表 我有一个只有两个字段的 native 查询(由于遗留原因,公司有很多我想删除的急切映射)

系统正在使用 spring 数据 我想映射为 native 查询并仅将这两个标量填充到我的公司列表中 我该如何使用 CompanyRepository 来做到这一点?

@Entity
@Audited
@Table(name = "company")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
  @NamedNativeQuery(
      name = "getDefaultBuyers",
      query =
          "SELECT c.id as id ,c.name as name"
              + "FROM complex query with non mapped tables "
      resultSetMapping = "getDefaultBuyersMapping")

 @SqlResultSetMapping(
      name = "getDefaultBuyers",
      columns = {@ColumnResult(name = "name"),@ColumnResult(name = "id")})
public class Company {
 @Column(name = "id", nullable = false, length = 32)
 protected String id;
@Column(name = "name", nullable = false)
 protected String name;
//diffrent properties 
}

@Repository
public interface CompanyRepository
    extends JpaRepository<Company, Long>, JpaSpecificationExecutor<Company>{}

编辑 我不认为它很优雅,但是这个有效,有人可以帮我做得更优雅

@Repository
public interface CompanyRepository
    extends JpaRepository<Company, Long>, JpaSpecificationExecutor<Company>{
@Query(
      value =
          "SELECT c.id as id ,c.name as name FROM bidder_config b, native_version n, company c WHERE ...",
      nativeQuery = true)
  Object[][] getDefaultBuyers(); ```

最佳答案

显然 Spring 数据中存在一个问题,解决方法如下:

@Repository
public interface CompanyRepository
    extends JpaRepository<Company, Long>, JpaSpecificationExecutor<Company>{
    @Query(nativeQuery = true)
  List<DefaultBuyerDTO> getDefaultBuyers();
}

参见https://github.com/spring-projects/spring-data-examples/tree/master/jpa/jpa21#support-for-custom-sqlresultsetmapping-with-constructorresult欲了解更多信息

关于java - Spring 数据存储库在未映射的 POJO 上具有 native 命名查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59856355/

相关文章:

java - 使用规范按父实体排序

hibernate - Spring JPA 审计因多个数据源而失败

java - 尝试绘制图像时来源未知

java - Java 中的泛型/接口(interface)和树结构

java - 如何在嵌入式编辑器中显示打印边距/垂直线?

java - 使用jar库包编译并执行java程序

java - 使用 @OneToMany 或 @ManyToMany 来针对发生的未映射类异常

java - 设置构造函数参数时无法解析对 bean 'entityManagerFactory' 的引用

java - 为什么使用 Jackson 时会抛出 “Cannot deserialize instance of ` ` out of START_OBJECT token”

elasticsearch - Elasticsearch:请求[/some index/_refresh]包含无法识别的参数:[refresh]