I am trying to call an Oracle stored procedure, and below are my Entity and Repository classes
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; }
My storage class
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); }
Below is 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 project entries
<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>
When I try to run repository tests, I see an error below,
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
I never used Spring Data JPA with stored procedure, but I appreciate any feedback / input here
spring-data-jpa
GG0424
source share