首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@SqlResultSetMapping用法导致架构验证问题

@SqlResultSetMapping用法导致架构验证问题
EN

Stack Overflow用户
提问于 2020-02-06 09:24:41
回答 1查看 221关注 0票数 2

为了统计目的,我必须提取数据。我创建了一个本机查询,并使用@SqlResultSetMapping将结果集映射到一个对象。Hibernate需要将这个类(精化)声明为@Entity,但不是一个表,而且我不想要一个表,因为我只需要在需要时动态提取数据。

代码运行良好,但gitlab管道在验证过程中失败。

代码语言:javascript
复制
schemaManagementException: Schema-validation: missing table [elaboration].

到目前为止,我的代码如下:

代码语言:javascript
复制
    SqlResultSetMapping(name="ValueMapping",
                     classes={
                       @ConstructorResult(
                         targetClass=Elaboration.class,
                         columns={
                           @ColumnResult(name="areadesc", type=String.class),
                           @ColumnResult(name="subsectordesc", type=String.class),
                           @ColumnResult(name="eurovalue", type=BigDecimal.class),
                           @ColumnResult(name="eurotch", type=BigDecimal.class),
                         }
                       )
                     })
    @Entity 
    public class Elaboration{
      @Id
      private Long id;
      private String areadesc;
      private String subsectordesc;
      private Integer dossiercount;
      private BigDecimal eurovalue;
      private BigDecimal eurotch; 

    ....

以及自定义查询:

代码语言:javascript
复制
        String statisticValueQuery = "select  a.mdescr as areadesc, s.mdescr as subsectordesc, sum(euro_value) as eurovalue, 
    sum(euro_value_tch) as eurotch " +
                                   "from dossier d " +
                                   "join dossier_document dd on d.id = dd.dossier_id " +
                                   "join dossier_country dc on d.id = dc.dossier_id " +
                                   "join country c on dc.country_id = c.id " +
                                   "join area a on c.area_id = a.id " +
                                   "join dossier_subsector ds on d.id = ds.dossier_id " +
                                   "join subsector s on ds.subsector_id = s.id " +
                                   "where dd.document_id = :document  " +
                                   "and d.submission_date >= :startdate  and d.submission_date <= :enddate " +
                                   "group by s.id, a.id;";

      public List<Elaboration> getValueElaboration(ElaborationRequestDTO elaborationRequestDTO){

        Query resultMapping = em.createNativeQuery(statisticValueQuery, "ValueMapping");
        resultMapping.setParameter("startdate", elaborationRequestDTO.getElaborateFromEquals());
        resultMapping.setParameter("enddate", elaborationRequestDTO.getElaborateToEquals());
        resultMapping.setParameter("document", elaborationRequestDTO.getDocumentIdEquals());
        return resultMapping.getResultList();

是否有办法通过验证测试?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-06 09:36:16

这是错误的说法。

Hibernate需要声明这个类(精化)为@Entity

您应该将@SqlResultSetMapping声明置于某些@Entity之上,但它可以是与Elaboration无关的其他实体。

代码语言:javascript
复制
@SqlResultSetMapping(name="ValueMapping",
                 classes={
                   @ConstructorResult(
                     targetClass=Elaboration.class,
                     columns={
                       @ColumnResult(name="areadesc", type=String.class),
                       @ColumnResult(name="subsectordesc", type=String.class),
                       @ColumnResult(name="eurovalue", type=BigDecimal.class),
                       @ColumnResult(name="eurotch", type=BigDecimal.class),
                     }
                   )
                 })
@Entity 
public class SomeEntity {

}

如果Elaboration不是一个实体,则不应该对其进行注释。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60091526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档