【发布时间】:2018-10-15 02:15:45
【问题描述】:
我有一个实体类UserModel.java
@Entity
@Table
@Data
@EqualsAndHashCode( of = { "id" } )
@ToString( of = { "id" } )
public class UserModel {
@Id
@GeneratedValue( strategy = GenerationType.AUTO )
@Column( name = "u_id" )
private Long id;
@Column( name = "u_first_name" )
private String firstName;
@Column( name = "u_last_name" )
private String lastName;
@Column( name = "u_email_id" )
private String emailId;
@Column( name = "u_password" )
private String password;
@Column( name = "u_mobile_number" )
private String mobileNumber;
@Column( name = "u_created_at" )
private Calendar createdAt;
@Column( name = "u_is_active" )
private Boolean isActive;
@Column( name = "u_reason" )
private String reason;
}
我需要根据每列中包含的值获取一些统计信息。所以我创建了一个JPQL 查询,并将结果映射到另一个Entity 类UserStatisticsModel.java
@Data
@Entity
public class UserStatisticsModel {
@Id
@Column
private Integer id;
@Column
private Integer activeUsers;
@Column
private Integer suspendedUsers;
@Column
private Integer removedUser;
}
我创建了一个存储库类来执行查询。
public interface UserStatisticsRepository extends JpaRepository<UserStatisticsModel, Integer> {
@Query( " Select sum(case when u.isActive is true then 1 else 0 end) as activeUsers, "
+ " sum(case when u.isSuspended is true then 1 else 0 end) as suspendedUsers, "
+ " sum(case when u.isActive is false then 1 else 0 end) as removedUser"
+ " from UserModel u " + " where u.accountStatus <>5" )
UserStatisticsModel getUserStatistics();
}
但是在执行查询时我遇到了异常。虽然根据日志查询正在执行并且值是完美的,但映射失败。
Caused by: org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.Integer] to type [com.highpeak.tlp.datastore.model.UserStatisticsModel]
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:324)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:206)
at org.springframework.core.convert.support.ArrayToObjectConverter.convert(ArrayToObjectConverter.java:66)
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:37)
... 125 common frames omitted
谁能解释这个错误是什么以及如何解决它?
可用的解决方案:
我可以在
UserModel.java中创建这些字段,但我不想 在该类中创建这些字段。我也可以创建一个原生查询,它会起作用
更新
如果我将查询的返回类型更改为List<Integer>,我不会得到任何异常并且我会得到正确的结果。但是为什么我不能将这些整数映射到我的 @Entity 类 UserStatisticsmodel.java 的字段中
【问题讨论】:
-
它告诉你问题出在哪里:你还没有定义一个转换器来从整数转换为 UserStatisticsModel。
-
您可能还想考虑在
@Query上设置nativeQuery=true,除非您出于某种原因没有故意这样做。 -
@RoddyoftheFrozenPeas 如何定义转换器?
-
这不是原生查询。如果我将其设置为 true,它将起作用。但我想用
JPQL
标签: java spring-boot spring-data-jpa hibernate-entitymanager