[SPRING] 어떻게 jpa 스프링을 사용하여 저장 프로 시저를 호출 할 수 있습니다.
SPRING어떻게 jpa 스프링을 사용하여 저장 프로 시저를 호출 할 수 있습니다.
JPA 기법을 사용하여 SPRING에 익숙하지 않습니다.
MySQL 5. 쓰여진 저장 프로 시저를 호출하려고 할 때 예외를 추출하는 저장 프로 시저 호출을 사용하여 데이터를 가져 오려고 할 때.
내 persistence.xml은
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="SPT3" transaction-type="RESOURCE_LOCAL">
<mapping-file>META-INF/persistence-query.xml</mapping-file>
<class>com.spt3.pojo.Users</class>
<properties>
<property name="hibernate.dialect" value=">org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/spring_security" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.username" value="user" />
<property name="hibernate.connection.password" value="pass" />
<property name="cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/>
<property name="hibernate.query.substitutions" value="true 1, false 0"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
나는 코드를 시도했다.
package com.spt3.dao;
import com.spt3.pojo.Users;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import org.springframework.orm.jpa.JpaCallback;
import org.springframework.orm.jpa.support.JpaDaoSupport;
import org.springframework.transaction.annotation.Transactional;
@Transactional
public class JpaUsersDao extends JpaDaoSupport {
public void getResultsByStoredProcedure() {
List list=(ArrayList)getJpaTemplate().execute(new JpaCallback() {
public List doInJpa(EntityManager em) throws PersistenceException {
javax.persistence.Query query=em.createQuery("call st_proc_getusers()"); // Here the procedure call
return query.getResultList(); // returning result list
}
});
}
}
사실 jpa 템플릿을 사용하여 저장 프로 시저를 호출하는 방법을 모르겠습니다.
스프링 JPA에서 저장 프로 시저를 호출하려면 어떻게해야합니까?
이 문제에서 벗어나 해결책을 제시하십시오.
해결법
-
==============================
1.대신 EntityManager.createNativeQuery ()를 사용하십시오. JPA 쿼리를 통해 저장 프로 시저를 호출 할 수 있다고 생각하지 않습니다.
대신 EntityManager.createNativeQuery ()를 사용하십시오. JPA 쿼리를 통해 저장 프로 시저를 호출 할 수 있다고 생각하지 않습니다.
public List doInJpa(EntityManager em) throws PersistenceException { javax.persistence.Query query=em.createNativeQuery("call st_proc_getusers()"); return query.getResultList(); }
@NamedNativeQuery를 사용할 수도 있습니다.
-
==============================
2.저장 프로 시저를 호출하면 SQL 문을 실행한다는 의미입니다. JPQL 쿼리 (em.createQuery (...)를 수행 할 때 코드에서 얻는 것)로는이 작업을 수행 할 수 없습니다. 네이티브 SQL을 데이터베이스로 보내고 실행하고 결과를 얻을 수있는 네이티브 쿼리를 만들어야합니다.
저장 프로 시저를 호출하면 SQL 문을 실행한다는 의미입니다. JPQL 쿼리 (em.createQuery (...)를 수행 할 때 코드에서 얻는 것)로는이 작업을 수행 할 수 없습니다. 네이티브 SQL을 데이터베이스로 보내고 실행하고 결과를 얻을 수있는 네이티브 쿼리를 만들어야합니다.
String query = "call st_proc_getusers(?)"; NativeQuery nq = em.createNativeQuery(query); //the following line is necessary only if your stored procedure accepts a parameter: nq.setParameter(1, "paramValue"); List<?> results = em.createNativeQuery(query).getResultList();
-
==============================
3.JPA 2.1은 저장 프로 시저 지원을 도입했습니다. 네이티브 쿼리 대신 시도해 볼 수도 있습니다.
JPA 2.1은 저장 프로 시저 지원을 도입했습니다. 네이티브 쿼리 대신 시도해 볼 수도 있습니다.
http://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#createStoredProcedureQuery%28java.lang.String%29
from https://stackoverflow.com/questions/7886401/how-can-i-call-stored-procedure-using-spring-with-jpa by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 트랜잭션 경계 이해하기 (0) | 2019.02.12 |
---|---|
[SPRING] Struts에서 Spring MVC 로의 마이그레이션 (0) | 2019.02.12 |
[SPRING] Spring 배치 - 처리 후 디렉토리에서 플랫 파일 삭제 (0) | 2019.02.12 |
[SPRING] @ServerEndpoint 및 @Autowired (0) | 2019.02.12 |
[SPRING] 스프링 보안 : REST 인증 테스트 및 이해 (0) | 2019.02.12 |