Как обеспечить точность данных в данных весенней загрузки Jpa?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как обеспечить точность данных в данных весенней загрузки Jpa?

Сообщение Anonymous »

Недавно я работаю над проектом весенней загрузки. По сути, это бэкэнд-проект. У меня есть класс репозитория, в котором я использовал сложный запрос, который принимает идентификатор заголовка и выдает одну строку.
Интерфейс репозитория:

Код: Выделить всё

package com.springboot.project.leavemonitoringapp.repository;

import com.springboot.project.leavemonitoringapp.model.LeaveApproval;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface LeaveApprovalRepository extends JpaRepository {
@Query(value = "SELECT ROWNUM SRL_NUM,\n" +
"        REPORT_HEADER_ID,\n" +
"        NTF_RESPONDER,\n" +
"        CASE\n" +
"           WHEN APPROVER_NAME IS NULL THEN NTF_RESPONDER\n" +
"           ELSE APPROVER_NAME\n" +
"        END\n" +
"           APPROVER_NAME,\n" +
"        APPROVER_ACTION,\n" +
"        NTF_NOTE NOTE,\n" +
"        ACTION_DATE\n" +
"   FROM                                                                     --\n" +
"       (                                                                    --\n" +
"        SELECT  SRL_NUM,\n" +
"                REPORT_HEADER_ID,\n" +
"                ACTION_DATE,\n" +
"                NTF_RESPONDER,\n" +
"                APPROVER_NAME,\n" +
"                APPROVER_ACTION,\n" +
"                NTF_NOTE\n" +
"           FROM                                                             --\n" +
"               (  SELECT X.SRL_NUM SRL_NUM,\n" +
"               X.EXPENSE_REPORT_HDR_ID REPORT_HEADER_ID,\n" +
"                         X.NTF_RESPONDER,\n" +
"                         CASE\n" +
"                            WHEN PPF.FULL_NAME IS NULL\n" +
"                            THEN\n" +
"                               (SELECT DISPLAY_NAME\n" +
"                                  FROM APPS.WF_ROLES\n" +
"                                 WHERE NAME = X.NTF_RESPONDER)\n" +
"                            ELSE\n" +
"                               PPF.FULL_NAME\n" +
"                         END\n" +
"                            AS APPROVER_NAME,\n" +
"                         INITCAP (X.NTF_ACTION) AS APPROVER_ACTION,\n" +
"                         REPLACE (REPLACE (X.NTF_NOTE, CHR (13), ' '),\n" +
"                                  CHR (10),\n" +
"                                  '')\n" +
"                            AS NTF_NOTE,\n" +
"                         TO_CHAR (X.CREATION_DATE, 'DD-MON-RR HH24:MI')\n" +
"                            AS ACTION_DATE\n" +
"                    FROM                          --xxssgil_er_approval_hist x\n" +
"                        XXSSGIL.XXSSGIL_APPROVAL_HISTORYS_VV X,\n" +
"                         APPS.PER_ALL_PEOPLE_F PPF\n" +
"                   WHERE X.EMPLOYEE_ID = PPF.PERSON_ID(+)\n" +
"                         AND TRUNC (X.CREATION_DATE) BETWEEN PPF.EFFECTIVE_START_DATE(+)\n" +
"                                                         AND PPF.EFFECTIVE_END_DATE(+)\n" +
"                         AND X.EXPENSE_REPORT_HDR_ID = :L_INVOICE_ID\n" +
"                ORDER BY X.SRL_NUM)\n" +
"        UNION ALL\n" +
"        (SELECT SRL_NUM,\n" +
"        REPORT_HEADER_ID,\n" +
"                ACTION_DATE,\n" +
"                NTF_RESPONDER,\n" +
"                APPROVER_NAME,\n" +
"                APPROVER_ACTION,\n" +
"                NTF_NOTE\n" +
"            FROM (SELECT 0 AS SRL_NUM,\n" +
"                        H.REPORT_HEADER_ID,\n" +
"                       WUR.USER_NAME AS NTF_RESPONDER,\n" +
"                        (SELECT PAPF.FULL_NAME\n" +
"                           FROM APPS.PER_ALL_PEOPLE_F PAPF,\n" +
"                                APPS.PER_ALL_ASSIGNMENTS_F PAAF\n" +
"                          WHERE     1 = 1\n" +
"                                AND PAPF.BUSINESS_GROUP_ID = '84'\n" +
"                                AND PAPF.EMPLOYEE_NUMBER = WUR.USER_NAME --'3023'\n" +
"                                AND PAPF.PERSON_ID = PAAF.PERSON_ID\n" +
"                                AND TRUNC (SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE\n" +
"                                                        AND PAPF.EFFECTIVE_END_DATE\n" +
"                                AND TRUNC (SYSDATE) BETWEEN PAAF.EFFECTIVE_START_DATE\n" +
"                                                        AND PAAF.EFFECTIVE_END_DATE)\n" +
"                           AS APPROVER_NAME,\n" +
"                        'Pending' AS APPROVER_ACTION,\n" +
"                        '' AS NTF_NOTE,\n" +
"                        '' AS ACTION_DATE\n" +
"                   FROM APPS.XXSSGIL_APPROVAL_LV_HDR H,\n" +
"                        APPS.XXSSGIL_APPROVAL_LV_LINE L,\n" +
"                        APPS.WF_USER_ROLES WUR,\n" +
"                        APPS.WF_NOTIFICATIONS N\n" +
"                  WHERE     1 = 1\n" +
"                        AND H.REPORT_HEADER_ID = :L_INVOICE_ID\n" +
"                        AND WUR.ROLE_NAME = N.TO_USER\n" +
"                        AND H.WF_ITEM_KEY = N.ITEM_KEY\n" +
"                        AND L.REPORT_HEADER_ID = H.REPORT_HEADER_ID\n" +
"                        AND N.STATUS = 'OPEN'\n" +
"                        AND H.STATUS_FLG = 'In-Process')))\n" +
"                        order by SRL_NUM desc\n" +
"            FETCH FIRST 1 ROW ONLY",nativeQuery = true)
List findLeaveApprovalRecord(@Param("L_INVOICE_ID") String headerId); //here L_INVOICE_ID is replace by report header id
}
Класс обслуживания:

Код: Выделить всё

@Service
public class AttendanceLeaveService {
@Autowired
private AttendanceLeaveRepository attendanceLeaveRepository;
@Autowired
private LeaveApprovalRepository leaveApprovalRepository;
@Autowired
private LeaveIssueRepository leaveIssueRepository;
@Autowired
private PFLoanRepository pfLoanRepository;

public List getAttendanceLeaveRecord(String status){
return attendanceLeaveRepository.findAttendanceLeaveRecord("");
}

public List getLeaveApprovalRecord(String headerId){
return leaveApprovalRepository.findLeaveApprovalRecord(headerId);
}
public PFLoan getPFInfo(String empId){
return pfLoanRepository.findPFInfo("",empId);
}

public Map getLeaveIssue(){
List headerIdList = List.of("17524","17527","17529");
Map unsolvedLeaves = new HashMap();
for (String headerId : headerIdList){
List leaveApproval = getLeaveApprovalRecord(headerId);
unsolvedLeaves.put(headerId,leaveApproval);
}
return unsolvedLeaves;
}
Здесь есть getLeaveIssue(), где есть список идентификаторов заголовка и цикл for, который принимает идентификатор заголовка и передает его по строке ниже

Код: Выделить всё

List leaveApproval = getLeaveApprovalRecord(headerId);
Эта функция подходит для каждого идентификатора заголовка с передачей одного значения по списку (List.of("17524")). Но он не работает должным образом при передаче нескольких значений (List.of("17524","17527","17529")). Чтобы выяснить это, я много отлаживал и обнаружил неточные результаты.
как показано ниже

Код: Выделить всё

 {
"17524": [
{
"serialNumber": 3,
"headerId": "17524",
"responderName": "4939",
"approverName": "Mr. ABDUS SALAM (GM-Distribution)",
"approverAction": "Approved",
"note": null,
"actionDate": "24-APR-24 11:29"
}
],
"17527": [
{
"serialNumber": 2,
"headerId": "17527",
"responderName": "5284",
"approverName": "Mr. MD. MOTIUR RAHMAN (COO-Operations)",
"approverAction": "Approved",
"note": null,
"actionDate": "24-APR-24 15:58"
}
],
"17529": [
{
"serialNumber": 3,
"headerId": "17524",
"responderName": "4939",
"approverName": "Mr. ABDUS SALAM (GM-Distribution)",
"approverAction": "Approved",
"note": null,
"actionDate": "24-APR-24 11:29"
}
]
}
Здесь мы видим, что значение с первым идентификатором заголовка повторяется для последнего вывода.
Почему это происходит?
Как исправить?

Подробнее здесь: https://stackoverflow.com/questions/783 ... t-data-jpa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»