spring-data-jpa - Spring Data JPA 存储过程

标签 spring-data-jpa

我正在尝试调用 Oracle 存储过程,下面是我的实体和存储库类

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedStoredProcedureQuery;
import javax.persistence.ParameterMode;
import javax.persistence.StoredProcedureParameter;

@NamedStoredProcedureQuery(name = "casedetails", procedureName = "APPS.GET_SR_DATA", resultClasses = Case.class, parameters = {
        @StoredProcedureParameter(name = "p_sr_number", mode = ParameterMode.IN, type = String.class),
        @StoredProcedureParameter(name = "p_results", mode = ParameterMode.REF_CURSOR, type = void.class),
        @StoredProcedureParameter(name = "p_retVal", mode = ParameterMode.OUT, type = Long.class),
        @StoredProcedureParameter(name = "p_errMsg", mode = ParameterMode.OUT, type = String.class) })
/* }) */
@Entity
public class Case implements Serializable {

    @Id
    @Column(name = "sr_number")
    private String caseNumber;
    @Column(name = "problem_summary")
    private String caseTitle;
    @Column(name = "sr_type")
    private String caseCategory;
}

我的存储库类,
import org.springframework.data.repository.query.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.query.Procedure;

public interface CaseRepository extends JpaRepository<Case,String>{

    @Procedure(name = "casedetails", procedureName = "APPS.GET_SR_DATA")
    List<Case> findByCaseNumber(@Param("caseNumber") String caseNumber);
}

下面是persistence.xml
<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0">

    <persistence-unit name="case-rest-service" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
    </persistence-unit>

</persistence>

项目 pom.xml 条目
<dependency>
            <groupId>org.springframework.hateoas</groupId>
            <artifactId>spring-hateoas</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
        </dependency>
<dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.6.0-M3</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
        </dependency>

当我尝试运行存储库测试时,我看到以下错误,
Object of class [org.springframework.data.jpa.repository.query.PartTreeJpaQuery] must be an instance of class org.springframework.data.jpa.repository.query.StoredProcedureJpaQuery; nested exception is java.lang.IllegalArgumentException: Object of class [org.springframework.data.jpa.repository.query.PartTreeJpaQuery] must be an instance of class org.springframework.data.jpa.repository.query.StoredProcedureJpaQuery

我之前从未将 Spring Data JPA 与存储过程一起使用,但我感谢这里的任何反馈/输入

最佳答案

我从未找到解决方案,所以采用了不同的方法

@Repository 
public interface MyObjectRepository extends CrudRepository<MyObject, String>  {
    @Query(value = "EXECUTE [dbo].[myProc] :fieldName, :pages", nativeQuery = true)
    Set<MyObject> findAllByFieldName(@Param("fieldName") String fieldName, @Param("pages") int pages);
}

这是一个类似的,我建议了相同的答案 question

此链接可能会有所帮助 DATA REPOSITORIES IN SPRING DATA JPA

关于spring-data-jpa - Spring Data JPA 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32834853/

相关文章:

java - @OneToMany/@ManyToOne 如何使用表单保存数据

java - Spring Data JPA 与 H2 数据库 : Connect two Entities in different Projects

java - 带有迭代器的 ConcurrentModificationException

spring-data-jpa - 如何使用MapperSuperClass在Spring Data JPA中实现数据库继承?

java - Spring Data JPA 使用 EclipseLink 作为 JPA 提供者 : possible bug in EclipseLink?

java - JPA Spring - 过滤日期

spring-boot - @DataJpaTest 在 MySQL 中更新实际数据,但在 H2 中工作正常

java - 如何将文本密码与使用 spring data jpa 哈希的密码进行比较?

java - 事务标记为仅回滚,原因未知

spring - 如何使用 Spring Data 和 QueryDSL 执行带分页的 JPAQuery