【发布时间】:2017-05-28 00:55:53
【问题描述】:
我正在尝试构建一个 Spring Boot Rest 端点,该端点调用一个具有 2 个 in 参数和 45 个约束参数的 Oracle 存储过程。我创建了一个实体:
package com.me.data.userservice.models;
import javax.persistence.*;
import java.util.Date;
/**
* Created by me on 5/27/17.
*/
@Entity
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(name = "getUserDetailsSp",
procedureName = "user_pkg.get_user_details",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "p_in_user_id", type = Long.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "p_in_region", type = String.class)
},
resultClasses = UserDetails.class)
})
public class UserDetails {
//region Private members
@Id
private Long user_id;
private String first_name;
private String last_name;
private String email;
@Column(name = "p_in_user_id", nullable = false)
private String userId;
private String user_id;
@Column(name = "p_in_region", nullable = false)
private String region;
private Long scnd_user_id;
...
}
还有一个存储库:
package com.me.data.userservice.repositories;
import com.me.data.userservice.models.UserDetails;
import org.springframework.data.jpa.repository.query.Procedure;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
/**
* Created by me on 5/27/17.
*/
public interface UserDetailsRepository extends CrudRepository<UserDetails, Long> {
@Procedure(name="getUserDetailsSp")
public UserDetails findByUserIdAndRegion(@Param("p_in_user_id") String userId, @Param("p_in_region") String region);
}
所有这些代码都可以正常编译,但是当我调用存储库时出现以下错误:
2017-05-27 18:41:27 错误 o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() 用于 servlet [dispatcherServlet] 在上下文中的路径 [] 抛出异常 [请求处理失败;嵌套异常是 org.springframework.dao.InvalidDataAccessApiUsageException:对象 类 [org.springframework.data.jpa.repository.query.PartTreeJpaQuery] 必须是类的实例 org.springframework.data.jpa.repository.query.StoredProcedureJpaQuery; 嵌套异常是 java.lang.IllegalArgumentException: Object of 类 [org.springframework.data.jpa.repository.query.PartTreeJpaQuery] 必须是类的实例 org.springframework.data.jpa.repository.query.StoredProcedureJpaQuery] 根本原因 java.lang.IllegalArgumentException:类的对象 [org.springframework.data.jpa.repository.query.PartTreeJpaQuery] 必须 成为类的一个实例 org.springframework.data.jpa.repository.query.StoredProcedureJpaQuery 在 org.springframework.util.Assert.instanceCheckFailed(Assert.java:389) 在 org.springframework.util.Assert.isInstanceOf(Assert.java:327) 在 org.springframework.util.Assert.isInstanceOf(Assert.java:339) 在 org.springframework.data.jpa.repository.query.JpaQueryExecution$ProcedureExecution.doExecute(JpaQueryExecution.java:300) 在 org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:82) 在...
由于某种原因,我无法解码此错误,并且在 google 上找不到任何帮助。
这一定是可能的,但我没有找到任何具有多个返回值或仅输入参数的示例。
添加细节
其实我才意识到我user_pkg.get_user_details其实是一个查询函数。这对我的应用有何改变?
【问题讨论】:
-
@Procedure注释也有同样的问题。
标签: java spring stored-procedures spring-data-jpa