Вызов хранимой процедуры и сопоставление результата запроса с не-сущностью POJO с использованием Spring JPA SqlResultSetMapping

#java #hibernate #jpa #pojo #sqlresultsetmapping

#java #спящий режим #jpa #pojo #sqlresultsetmapping

Вопрос:

Я пытаюсь сопоставить результаты хранимой процедуры с не-сущностью POJO, используя @SqlResultSetMapping с @ConstructorResult. Вот мой код:

 @MappedSuperclass
@SqlResultSetMapping(name = "Testing", classes = @ConstructorResult(targetClass = Testing.class, columns = {
        @ColumnResult(name = "TTEAM_ID", type = Integer.class),
        @ColumnResult(name = "VDATE", type = BigInteger.class),
        @ColumnResult(name = "Days_in_Field", type = Integer.class),
        @ColumnResult(name = "Expected_cummilative_Number_of_HH", type = Integer.class),
        @ColumnResult(name = "Cummlative_HH_Reached",type = Integer.class),
        @ColumnResult(name = "HH_Reached_for_day",type = Integer.class),
        @ColumnResult(name = "HHs_Finalised_for_day", type = Integer.class),
        @ColumnResult(name = "Number_of_HH_in_process_for_day", type = Integer.class),
        @ColumnResult(name = "Number_of_HH_Refused_for_day",type = Integer.class),
        @ColumnResult(name = "Number_of_Revisits_Scheduled_for_day", type = Integer.class),
        @ColumnResult(name = "HH_loss_3rd_visit_attempt_refusals_for_day", type = Integer.class)}))

public class Testing {

    private Integer tteam_id;
    private Integer vdate;
    private Integer days_in_field;
    private Integer Expected_cummilative_Number_of_HH;
    private Integer Cummlative_HH_Reached;
    private Integer HH_Reached_for_day;
    private Integer HHs_Finalised_for_day;
    private Integer Number_of_HH_in_process_for_day;
    private Integer Number_of_HH_Refused_for_day;
    private Integer Number_of_Revisits_Scheduled_for_day;
    private Integer HH_loss_3rd_visit_attempt_refusals_for_day;

    public Testing(Integer tteam_id,
                   Integer vdate,
                   Integer Expected_cummilative_Number_of_HH,
                   Integer Cummlative_HH_Reached,
                   Integer HH_Reached_for_day,
                   Integer HHs_Finalised_for_day,
                   Integer Number_of_HH_in_process_for_day,
                   Integer Number_of_HH_Refused_for_day,
                   Integer Number_of_Revisits_Scheduled_for_day,
                   Integer HH_loss_3rd_visit_attempt_refusals_for_day ) {
        this.tteam_id = tteam_id;
        this.vdate = vdate;
        this.Expected_cummilative_Number_of_HH = Expected_cummilative_Number_of_HH;
        this.Cummlative_HH_Reached = Cummlative_HH_Reached;
        this.HH_Reached_for_day = HH_Reached_for_day;
        this.HHs_Finalised_for_day = HHs_Finalised_for_day;
        this.Number_of_HH_in_process_for_day = Number_of_HH_in_process_for_day;
        this.Number_of_HH_Refused_for_day = Number_of_HH_Refused_for_day;
        this.Number_of_Revisits_Scheduled_for_day = Number_of_Revisits_Scheduled_for_day;
        this.HH_loss_3rd_visit_attempt_refusals_for_day = HH_loss_3rd_visit_attempt_refusals_for_day;
    }
//getter  and setters
  

а затем вызов моей хранимой процедуры

 public List<Testing> getDailyAchievements(){
        List list;
        StoredProcedureQuery query = entityManager.createStoredProcedureQuery("dailyreports", "Testing");
        try {
            // Execute query
            query.execute();
            list = query.getResultList();
        } finally {
            try {
                query.unwrap(ProcedureOutputs.class).release();
            } catch (Exception e) {
            }
        }
        return list;
    }
  

В итоге я получаю ошибку

Не удалось найти соответствующий конструктор в классе: com.ram.Testing

После попытки отладки приложения я получаю сообщение об ошибке

com.microsoft.sqlserver.jdbc.SQLServerException: оператор закрыт.

Я нашел пару ресурсов, в том числе этот: сопоставление @ConstructorResult, но мне все еще не повезло.

Чего мне не хватает? Почему не может быть найден конструктор?

Комментарии:

1. Хранимая процедура должна возвращать точно столбцы в соответствии с сопоставлением столбцов. Не могли бы вы показать нам хранимую процедуру или результат ее вызова вручную?

2. Привет, @Michal, я добавил хранимую процедуру

3. Привет, @Michal, я также добавил скриншот результатов хранимой процедуры

4. На первый взгляд все выглядит нормально. Я бы попытался уменьшить количество выходных столбцов и свойств Java, чтобы увидеть, где ошибка. Просто просмотрев код, я не вижу никакой явной ошибки / ошибки.

5. Целочисленные типы верны, не так ли?