Spring JPA хранилище конвертер не найден - PullRequest
0 голосов
/ 04 мая 2018

У меня есть класс сущности 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

Может кто-нибудь объяснить, что это за ошибка и как ее исправить?

Доступное решение:

  1. Я могу создать эти поля в UserModel.java, но я не хочу создать эти поля в этом классе.

  2. Я также могу создать собственный запрос, и он будет работать

UPDATE Если я изменю тип возврата запроса на List<Integer>, я не получу никаких исключений и получу правильный результат. Но почему я не могу сопоставить эти целые числа с полями моего @Entity класса UserStatisticsmodel.java

1 Ответ

0 голосов
/ 04 мая 2018

Ваш вопрос является проблемой. Вы говорите Select 1 as id, но хотите вернуть UserStatisticsModel. Так что вам придется исправить ваш запрос или изменить сигнатуру метода, чтобы вместо него возвращалось Integer.

...