JPA存储过程试图获取OUT,但是我有一个SELECT

时间:2019-03-22 18:43:05

标签: java hibernate jpa

这是一个相当漫长而复杂的问题。我有两个使用文件名和XML的存储过程。第一个存储过程运行良好。它传递文件名和XML以保存到数据库中,将xml分成1000个小块并将其保存在自己的行中。

Get将获取传入文件名的每个块,将它们连接在一起以构成整个XML。

我正在尝试使用JPA从我的MySQL的XML中获取响应。我目前有两个参数。一个是传入的文件名,另一个是预期的字符串。我对JPA和Hibernate不太熟悉,所以请原谅我缺乏的知识。

get存储过程仅使用一个参数。但是我的代码似乎认为需要两个。这是我的存储过程的JPA表示形式:

   @Entity
@NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(
        name = "p_xmlsave_getData",
        procedureName = "p_xmlsave_getData",
        resultClasses = {XmlSaveGetData.class},
        parameters = {
            @StoredProcedureParameter(
                name = "in_key",
                type = String.class,
                mode = ParameterMode.IN),
            @StoredProcedureParameter(
                name = "out_xml",
                type = String.class,
                mode = ParameterMode.OUT) })
})

public class XmlSaveGetData {

这是我的原始回购协议:

public interface XMLGetRepository extends CrudRepository<XmlSaveGetData, String> {
    @Procedure(name = "p_xmlsave_getData")
    String p_xmlsave_getData(@Param("in_key") String filename);

}

最后是我的存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_xmlsave_getData`(IN in_key char(40))
BEGIN
  DECLARE out_xml LONGTEXT DEFAULT '';
  DECLARE temp_str LONGTEXT DEFAULT '';
  declare done boolean default false;
  DECLARE cur_1 CURSOR FOR select `xml` from xmlsave where idnum = in_key order by seqnum;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := true;
open cur_1;
REPEAT
FETCH cur_1 INTO temp_str;
if(done = false) then
  set out_xml = concat(out_xml, temp_str);
end if;
UNTIL done = true
END REPEAT;
close cur_1;

select out_xml;
END

这是我要更新为JPA和Hibernate的所有旧版代码。

查看所有文档后,一切都正确完成,除了存储过程没有Out方法。而是选择方法。要使它正常工作,我遇到了很大的麻烦。

0 个答案:

没有答案