我有一个连接到Oracle DB的Spring Boot应用程序。这个DB有一堆用PL / SQL编写的存储过程和函数。
我试图调用一个非常简单的PL / SQL函数…
最后,这个SO链接( 如何使用Hibernate(EntityManager)或JPA 2调用Oracle函数或过程 )和这篇文章( https://vladmihalcea.com/how-to-call-oracle-stored-procedures-and-functions-from-hibernate/ 帮助我解决了我的问题。我做的改变让事情变得有效。
的 LinkAppl.java 强>
@Entity @Table(name = "LINK_APPL") public class LinkAppl { private String applId; private String applDeTx; private String seqNbResetCd; private String intfMsgFrmtCd; private String sndRcvCd; private String applAcptMsgFrmtCd; private String applActvCd; private String sodEodIn; private String linkNotesTx; private String lastModByUsrId; private Timestamp lastModTs; private String sndCnctStsCd; private Long maxSeqNb; private String batIntfIn; private String gfpSrcSiteCd; private String rcvRterAckmentIn; private String rcvMqCodIn; private String fxApplIn; private String rcvEodpAckmentIn; }
的 LinkApplService.java 强>
@Service @Log4j2 public class LinkApplService { private static final String CHECK_ACTIVE_APPL_QUERY = "select PKG_USROUTER.CHECK_ACTIVE_APPL(:appl) from DUAL"; @PersistenceContext private EntityManager em; @Autowired private LinkApplRepository linkApplRepository; public String checkApplicationActive(String applicationId) { String activeFlag = (String) em.createNativeQuery(CHECK_ACTIVE_APPL_QUERY) .setParameter("appl", applicationId) .getSingleResult(); log.debug("activeFlag: " + activeFlag); return activeFlag; } }
的 LinkApplController.java 强>
@Controller @RequestMapping("/applications") @Log4j2 public class LinkApplController { @Autowired private LinkApplService linkApplService; @GetMapping public String getAllApplLinks(Model model) { String activeFlag = linkApplService.checkApplicationActive("TITAN"); log.debug("@@@@@@@@@@@@@@@@activeFlag: " + activeFlag); model.addAttribute("activeFlag", activeFlag); return "index"; } }