gpt4 book ai didi

java - Spring data jpa调用带有大量参数的存储过程

转载 作者:行者123 更新时间:2023-12-01 17:54:02 25 4
gpt4 key购买 nike

是否可以将对象映射到 NamedStoredProcedureQuery 内的所有参数?我需要调用一个包含 40 多个参数的存储过程。以下代码变得非常长且难以阅读:

@NamedStoredProcedureQuery(
name="SomeSPName",
procedureName="SomeSPName",
resultClasses={ MyEntity.class },
parameters = {
@StoredProcedureParameter(name="PACKAGE", type=String.class, mode=ParameterMode.IN),
@StoredProcedureParameter(name="APPNM", type=String.class, mode=ParameterMode.IN),
// 40 more required parameters here...
)


public interface MyRepository extends JpaRepository<MyEntity, Long> {

@Query
@Procedure(name="SomeSPName")
long getResult(@Param("PACKAGE") String package, @Param("APPNM") String appnm, /* The rest of the params here */);

}

所以我的问题是我可以用一个具有参数的所有 getter 和 setter 的对象替换 getResult 中的参数,并且 Hibernate 将自动正确分配参数。例如:

public interface MyRepository extends JpaRepository<MyEntity, Long> {

@Query
@Procedure(name="SomeSPName")
long getResult(MyObject params);

}

这里,MyObject 将具有与顶部定义的每个 StoredProcedureParameter 相对应的字段。希望这是有道理的。我只是不想将所有 40 多个参数放入 getResult 定义中。如果有什么区别的话,我正在使用 DB2。任何帮助将不胜感激!

最佳答案

EntityManager entityManager;

public Long getResult(Params params) {
StoredProcedureQuery storedProcedure = entityManager
.createStoredProcedureQuery("SomeSPName", Long.class)
.registerStoredProcedureParameter("PACKAGE", String.class, ParameterMode.IN)
.registerStoredProcedureParameter("APPNM", String.class, ParameterMode.IN)
//...
.setParameter("PACKAGE", params.getPackage())
.setParameter("APPNM", params.getAppNm())
//...
;

return storedProcedure.getSingleResult();
}

关于java - Spring data jpa调用带有大量参数的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60749731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com