这是一个相当漫长而复杂的问题。我有两个使用文件名和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方法。而是选择方法。要使它正常工作,我遇到了很大的麻烦。