java - 如何通过使用 Spring Data 调用存储过程来选择实体

标签 java mysql spring hibernate jpa

假设我有一个包含以下选择的 MySQL 存储过程:

select * from users;

如何在 JpaRepository 中使用 @Procedure 注释以便我可以获得结果?像这样的东西:

public UserRepository extenda JpaRepository<User, Long>{
    @Procedure('get_users')
    List<User> getUsers();
}

最佳答案

假设这是您的程序:

CREATE PROCEDURE get_users()
BEGIN
    SELECT * FROM USERS;
END

你定义了一个@NamedStoredProcedureQuery:

@NamedStoredProcedureQuery(
    name="getUsers", 
    procedureName="get_users", 
    resultClass=User.class, parameters={
        @StoredProcedureParameter(queryParameter="data", name="data", direction=Direction.OUT_CURSOR)
    }
)
@Entity
public class User {
    ...
}

然后你可以这样调用你的过程:

public UserRepository extends JpaRepository<User, Long>{
    @Procedure('User.getUsers')
    List<User> getUsers();
}

您也可以像这样使用 EntityManager 进行检查:

Query query = entitymanager.createNamedQuery("getUsers");
List users = query.getResultList();

关于java - 如何通过使用 Spring Data 调用存储过程来选择实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30578089/

相关文章:

java - 如何使用 Log4J 在 Java 中创建二进制日志文件

java - 如何避免 TomEE 的 JDBC 连接池的数据库连接停滞?

java - 暂时禁用 Spring Security (ldap auth)

java - 如何解析 URL 并使用 Spring MVC 'reflectively' 运行方法?

spring - JBoss 7.1 上的 Spring 应用程序中的 Hibernate 日志记录

java - 为什么这行代码不起作用?

java - OpenGL ES 2.0 vbo 白屏

java - 创建一个数组对象 Student 并将其添加到 ArrayList

php - 根据条件计算子类别

php - 相当于 PDO 的 while(myslqi_fetch_array($result))