Как получить свойства текущего объекта, который вставлен в хранимую процедуру? - PullRequest
0 голосов
/ 27 ноября 2018

На моем контроллере я вставляю объект Letter в TBL_LETTER , который имеет хранимую процедуру PCPR_ADD_LETTER . Поэтому мне нужны свойства текущего объекта Letter , которыйМгновенно сохраняется, но я не могу его получить.

Я отправляю по карте через API:

@PostMapping("saveProcessAnexOne")
    public ResponseEntity saveAnnexOne(@RequestBody ProcessAnexOne processAnexOne) {
     Letter letter=new Letter(processAnexOne.getLetter().getLetterId(),
             processAnexOne.getLetter().getInout(),processAnexOne.getLetter().getInoutNo(),processAnexOne.getLetter().getInoutDate(),null,null,null,null,processAnexOne.getLetter().getSelectionId(),processAnexOne.getLetter().getAssessmentNo(),"PCS",null);      

     BigDecimal letterNo=letterService.insertLetter(letter);
     System.out.println("letterNo from db is"+letterNo);
}

При этом утверждении System.out.println ("letterNo from db is"+ letterNo); мне нужен текущий номерNo, который вставляется в таблицу.

LetterService.java

public interface LetterService {
        public BigDecimal insertLetter(Letter letter);

}

LetterServiceImpl.kava

@Service
public class LetterServiceImpl implements LetterService {

    @Autowired
    private LetterDao letterDao;

    @Override
    public BigDecimal insertLetter(Letter letter) {
        BigDecimal letter1=letterDao.saveLetter(letter);
        return letter1;
    }


    }

LetterDao.java

public interface LetterDao {
   public BigDecimal saveLetter(Letter letter);

}

LetterDaoImpl.java

@Override
    public BigDecimal saveLetter(Letter letter) {
        System.out.println("hitted here");
        SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName("PCPR_ADD_LETTER");
        Map<String, Object> inParamMap = new HashMap<String, Object>();
        System.out.println(letter.getLetterId());
        /*inParamMap.put("p_LETTER_NO",1);*/
        inParamMap.put("p_LETTER_ID",letter.getLetterId());
        inParamMap.put("p_INOUT",letter.getInout());
        inParamMap.put("p_INOUT_NO",letter.getInoutNo());
        inParamMap.put("p_INOUT_DATE",letter.getInoutDate());
        inParamMap.put("p_LETTER_ISSUED_SUB_BY",letter.getLetterIssuedSubBy());
        inParamMap.put("p_LETTER_FILE",letter.getLetterFile());
        inParamMap.put("p_REPRESENTATIVE_NAME",letter.getRepresentativeName());
        inParamMap.put("p_REPRESENTATIVE_NAME_ENG",letter.getRepresentativeNameEng());
        inParamMap.put("p_SELECTION_ID",letter.getSelectionId());
        inParamMap.put("p_ASSESSMENT_NO",1);
        inParamMap.put("p_ENTRY_BY", letter.getEntryBy());
        inParamMap.put("p_R_STATUS",null);

        SqlParameterSource in = new MapSqlParameterSource(inParamMap);
        return (BigDecimal) simpleJdbcCall.execute(in).get("p_LETTER_NO");

    }

Моя процедура вставки письма и получения письмаНет:

CREATE OR REPLACE PROCEDURE PCA_OWNER.PCPR_ADD_LETTER
(
      p_LETTER_NO    IN OUT     TBL_LETTER.LETTER_NO%TYPE,
      p_LETTER_ID               TBL_LETTER.LETTER_ID%TYPE,
      p_INOUT                   TBL_LETTER.INOUT%TYPE,
      p_INOUT_NO                TBL_LETTER.INOUT_NO%TYPE,
      p_INOUT_DATE              TBL_LETTER.INOUT_DATE%TYPE,
      p_LETTER_ISSUED_SUB_BY    TBL_LETTER.LETTER_ISSUED_SUB_BY%TYPE,
      p_LETTER_FILE             TBL_LETTER.LETTER_FILE%TYPE,
      p_REPRESENTATIVE_NAME     TBL_LETTER.REPRESENTATIVE_NAME%TYPE,
      p_REPRESENTATIVE_NAME_ENG TBL_LETTER.REPRESENTATIVE_NAME_ENG%TYPE,
      p_SELECTION_ID            TBL_LETTER.SELECTION_ID%TYPE,
      p_ASSESSMENT_NO           TBL_LETTER.ASSESSMENT_NO%TYPE,
      p_ENTRY_BY                TBL_LETTER.ENTRY_BY%TYPE,
      --P_ENTRY_DATE              TBL_LETTER.ENTRY_DATE%TYPE,      
      p_R_STATUS                TBL_LETTER.R_STATUS %TYPE
  )
  IS
    BEGIN
        PPK_TRANS.INS_UP_LETTER('INS',
                                 p_LETTER_NO,
                                 p_LETTER_ID,
                                 P_INOUT,
                                 P_INOUT_NO,
                                 P_INOUT_DATE,
                                 P_LETTER_ISSUED_SUB_BY,
                                 P_LETTER_FILE,
                                 P_REPRESENTATIVE_NAME,
                                 P_REPRESENTATIVE_NAME_ENG,
                                 P_SELECTION_ID,
                                 P_ASSESSMENT_NO,
                                 P_ENTRY_BY ,
                                 NULL ,
                                 P_R_STATUS 
                              );
     END;
/

Letter.java is

public class Letter {

        private BigDecimal letterNo;
        private int letterId;
        private String inout;
        private String inoutNo;
        private String inoutDate;
        private String letterIssuedSubBy;
        private String letterFile;
        private String representativeName;
        private String representativeNameEng;
        private int selectionId;
        private int assessmentNo;
        private String entryBy;
        private String rStatus;

        public Letter() {
//i omitted other getters and setters           
        }

Что-то не так в моей процедуре?

Я получаю сообщение об ошибке:

27 ноября 2018 г. 10:15:45 org.springframework.jdbc.core.metadata.CallMetaDataContext matchInParameterValuesWithCallParameters ПРЕДУПРЕЖДЕНИЕ: невозможно найти нужныеЗначение параметра луж для 'P_LETTER_NO' в пределах значений параметров при условии: [p_ASSESSMENT_NO, p_LETTER_FILE, p_SELECTION_ID, p_R_STATUS, p_INOUT_NO, p_INOUT_DATE, p_ENTRY_BY, p_LETTER_ID, p_INOUT, p_REPRESENTATIVE_NAME, p_REPRESENTATIVE_NAME_ENG, p_LETTER_ISSUED_SUB_BY]

letterNo из БД ISNULL

...