На моем контроллере я вставляю объект 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