gpt4 book ai didi

spring - 我如何使用带有 jpa 的 spring 调用存储过程

转载 作者:行者123 更新时间:2023-12-04 23:28:56 24 4
gpt4 key购买 nike

我是 SPRING 的新手,使用 JPA 技术。

我正在尝试调用用 mysql 5 编写的存储过程。当我尝试使用存储过程获取数据时,调用它喷出异常。

org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.QueryException: query must begin with SELECT or FROM: call [call st_proc_getusers()]; nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryException: query must begin with SELECT or FROM: call [call st_proc_getusers()]



我的 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 模板调用存储过程。

如何从 Spring 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 .

关于spring - 我如何使用带有 jpa 的 spring 调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7886401/

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