@SqlResultSetMapping 的使用导致模式验证问题
The @SqlResultSetMapping usage cause the schema validation problem
我必须提取数据用于统计目的。我创建了一个本机查询并使用 @SqlResultSetMapping
将结果集映射到一个对象。
Hibernate 需要将此 class(详细说明)声明为 @Entity
但不是 TABLE,我不想要 table,因为我只需要在需要的时候飞。
代码工作正常,但 gitlab 管道在验证期间失败
schemaManagementException: Schema-validation: missing table [elaboration].
这里是我的代码:
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;
....
和自定义查询:
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();
有没有办法通过验证测试?
谢谢
这是错误的说法。
Hibernate needs to declare this class (Elaboration) as @Entity
您应该将 @SqlResultSetMapping
声明放在某些 @Entity
之上,但它可以是与 Elaboration
.
无关的其他实体
@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
不是一个实体,您不应该这样注释它。
我必须提取数据用于统计目的。我创建了一个本机查询并使用 @SqlResultSetMapping
将结果集映射到一个对象。
Hibernate 需要将此 class(详细说明)声明为 @Entity
但不是 TABLE,我不想要 table,因为我只需要在需要的时候飞。
代码工作正常,但 gitlab 管道在验证期间失败
schemaManagementException: Schema-validation: missing table [elaboration].
这里是我的代码:
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;
....
和自定义查询:
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();
有没有办法通过验证测试? 谢谢
这是错误的说法。
Hibernate needs to declare this class (Elaboration) as @Entity
您应该将 @SqlResultSetMapping
声明放在某些 @Entity
之上,但它可以是与 Elaboration
.
@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
不是一个实体,您不应该这样注释它。