如何创建将作为一个参数表发送并作为一个return(out)参数表发送的数据库存储过程调用

时间:2017-01-26 14:50:48

标签: java sql-server spring hibernate spring-boot

如何创建一个数据库存储过程调用,该调用将表作为一个参数发送并作为一个return(out)参数表获取。

我首先将表作为参数发送,并执行以下操作:

@NamedStoredProcedureQuery(name = "testProcedure",
        procedureName = "testProcedure",
        resultClasses = {Integer.class},
        parameters = {
                @StoredProcedureParameter(
                        mode = ParameterMode.IN,
                        name = "tabela",
                        type = Tabela.class),
                @StoredProcedureParameter(
                        mode = ParameterMode.OUT,
                        name = "ilosc",
                        type = Integer.class)
        }
)

public class TestProcedure implements Serializable {
    @Id
    private Integer id;
}

也尝试这样的事情:

    final StoredProcedureQuery testProcedure = entityManager
            .createNamedStoredProcedureQuery("testProcedure")
            .registerStoredProcedureParameter(0, Object.class, ParameterMode.OUT)
            .registerStoredProcedureParameter(1, Object.class, ParameterMode.IN);

    List<Tabela> arrayList = new ArrayList<>();
    arrayList.add(Tabela.builder().firstName("Dominik").age(11).build());
    arrayList.add(Tabela.builder().firstName("Dominik22").age(22).build());

    testProcedure.setParameter(1, arrayList);

    testProcedure.execute();

但每次我得到&#34; Type不能为null&#34;

我创建了这个表实体,但它不起作用:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "tabela")
public class Tabela {
    @Id
    @Column(name = "first_name")
    private String firstName;
    @Column(name = "age")
    private Integer age;
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

可能更容易插入到输入表(可能是全局临时表),然后只执行存储过程,该存储过程可以从该表读取并写入不同的输出表(同样可能是全局临时表)然后你可以在那里查询输出。