【问题标题】:While executing NamedNativeQuery Join query after excluding the primary key using postgresql facing error在使用 postgresql 排除主键后执行 NamedNativeQuery Join 查询时面临错误
【发布时间】:2020-08-19 13:16:32
【问题描述】:

我在结果输出中不需要 id(主键),但在查询和结果集中排除 id 后得到 error.org.postgresql.util.PSQLException:在此 ResultSet 中找不到列名 id。 jpa 所以需要帮助格式化这个实体类。

注意:假设应该像下面的方法调用一样进行 entityManager.createNamedQuery("getPublisherInfoList",PublisherInfoResponseEntity.class).getResultList();

@NamedNativeQueries(value = {
@NamedNativeQuery(
name = "getPublisherInfoList",
query = "SELECT publisher.publisher_name,publisher.contact_name,publisher.contact_email,publisher.contact_phone,publisher.managed_services,\n" +
         "annual.customers,annual.employees,annual.revenue,"
     "FROM publisher_portal.publisher_informations publisher JOIN publisher_portal.publisher_annual annual\n" +
"ON publisher.publisher_name=annual.publisher_name",

resultSetMapping = "PublisherInfoResponseMappings"
),

@NamedNativeQuery(
name = "getPublisherByName",
query = "SELECT publisher.publisher_name,publisher.contact_name,publisher.contact_email,publisher.contact_phone,\n" +
"publisher.managed_services,annual.customers,annual.employees,annual.revenue,\n" +
"FROM publisher_portal.publisher_informations publisher JOIN publisher_portal.publisher_annual annual\n" +
"ON publisher.publisher_name=annual.publisher_name where publisher.publisher_name= :publisherName",
resultSetMapping = "PublisherInfoResponseMappings"
)

})

@SqlResultSetMapping(name = "PublisherInfoResponseMappings", entities = {
@EntityResult(entityClass = PublisherInfoResponseEntity.class, fields = {
@FieldResult(name = "publisher_name", column = "publisher_name"),
@FieldResult(name = "contact_name", column = "contact_name"),
@FieldResult(name = "contact_phone", column = "contact_phone"),
@FieldResult(name = "contact_email", column = "contact_email"),
@FieldResult(name = "managed_services", column = "managed_services"),
})
})


@Entity
@Table(name="publisher_informations",schema="publisher_portal")
public class PublisherInfoResponseEntity {


@Id
private Long id;

private String publisher_name;

private String contact_name;

private String contact_phone;

private String contact_email;

private String managed_services;

//setters and getters


}

【问题讨论】:

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


    【解决方案1】:

    查看是否要排除 resulset 中的某些列,只需在该特定列上使用 @Jsongnore 实体类中的列/字段。

    所以解决办法是

    在查询和结果集中包含主键,然后在主键上使用@Jsongnore,这样准备好的结果集就没有字段ID。

    注意您可以在字段或 getters 方法中应用 @Jsongnore

    举例

    @NamedNativeQueries(value = {
    @NamedNativeQuery(
    name = "getPublisherInfoList",
    query = "SELECT publisher.id,publisher.publisher_name,publisher.contact_name,publisher.contact_email,publisher.contact_phone,publisher.managed_services,\n" +
             "annual.customers,annual.employees,annual.revenue,"
         "FROM publisher_portal.publisher_informations publisher JOIN publisher_portal.publisher_annual annual\n" +
    "ON publisher.publisher_name=annual.publisher_name",
    
    resultSetMapping = "PublisherInfoResponseMappings"
    ),
    
    @NamedNativeQuery(
    name = "getPublisherByName",
    query = "SELECT publisher.id,publisher.publisher_name,publisher.contact_name,publisher.contact_email,publisher.contact_phone,\n" +
    "publisher.managed_services,annual.customers,annual.employees,annual.revenue,\n" +
    "FROM publisher_portal.publisher_informations publisher JOIN publisher_portal.publisher_annual annual\n" +
    "ON publisher.publisher_name=annual.publisher_name where publisher.publisher_name= :publisherName",
    resultSetMapping = "PublisherInfoResponseMappings"
    )
    
    })
    
    @SqlResultSetMapping(name = "PublisherInfoResponseMappings", entities = {
    @EntityResult(entityClass = PublisherInfoResponseEntity.class, fields = {
    @FieldResult(name = "id", column = "id")
    @FieldResult(name = "publisher_name", column = "publisher_name"),
    @FieldResult(name = "contact_name", column = "contact_name"),
    @FieldResult(name = "contact_phone", column = "contact_phone"),
    @FieldResult(name = "contact_email", column = "contact_email"),
    @FieldResult(name = "managed_services", column = "managed_services"),
    })
    })
    
    
    @Entity
    @Table(name="publisher_informations",schema="publisher_portal")
    public class PublisherInfoResponseEntity {
    
    @Id
    @Jsongnore
    private Long id;
    
    private String publisher_name;
    
    private String contact_name;
    
    private String contact_phone;
    
    private String contact_email;
    
    private String managed_services;
    
    //setters and getters
    
    
    }
    

    注意:假设 entityManager.createNamedQuery(..) 已经生成

    【讨论】:

      猜你喜欢
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 2021-06-12
      • 1970-01-01
      相关资源
      最近更新 更多