我有一个这样的JPAR存储库:
public interface MenetlevelRepository extends JpaRepository<Menetlevel,Long> {
@Query(
value = "select YEAR(datum) as \"ev\",MONTH(datum) as \"ho\", munkagep_id as \"gepid\", SUM(tevekenysegora) as \"sumtev\" from menetlevel group by munkagep_id, YEAR(datum), MONTH(datum)",
nativeQuery = true
)
Collection<MenetlevelStat> getRendetzettMenetlevel();
}
我必须像这样将结果转换为MenetlevelStat类:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class MenetlevelStat {
int ev;
int ho;
Long gepid;
Double sumtev;
}
运行代码时出现一些错误: 找不到能够将[org.springframework.data.jpa.repository.query.AbstractJpaQuery $ TupleConverter $ TupleBackedMap]类型转换为[...... model.MenetlevelStat]类型的转换器
为什么不起作用?
答案 0 :(得分:0)
您应该利用Spring Data JPA中提供的称为投影接口的功能。您必须像这样定义您的界面。
public interface MenetlevelStat {
int getEv();
int getHo;
Long gepId;
...
}
如果您必须坚持使用龙目岛,请按照文档进行操作:
您可以使用Project大大简化DTO的代码 龙目岛,提供@Value注释。
您的情况最终会像这样:
@Value
public class MenetlevelStat {
int ev;
int ho;
Long gepid;
Double sumtev;
}
使用注释时:
字段默认为private final,该类公开 构造函数,它接受所有字段并自动获取equals(…)和 hashCode()方法已实现。
答案 1 :(得分:0)
您可以直接将实体转换为dto。 这是代码:
@Repository
public interface LogRepository extends JpaRepository<Log, Long> {
@Query("SELECT l FROM Log AS l")
List<Log> findAll();
@Query("SELECT new test.pckg.dto.LogDTO(l.message, l.date) FROM Log l WHERE l.level = :level")
List<LogDTO> fetchLogsByLevelAsDTO(@Param("level") String level);
}
和dto类:
package test.pckg.dto
public class LogDTO {
private String message;
private LocalDateTime date;
public LogDTO(String message, LocalDateTime date){
this.message = message;
this.date = date;
}
//getters and setters
}
希望有帮助。