【问题标题】:How to select entities by calling a stored procedure with Spring Data如何通过使用 Spring Data 调用存储过程来选择实体
【发布时间】:2015-08-15 04:24:22
【问题描述】:

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

select * from users;

如何在JpaRepository 中使用@Procedure 注释,以便获得结果?比如:

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

【问题讨论】:

    标签: java mysql spring hibernate jpa


    【解决方案1】:

    假设这是您的程序:

    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();
    

    【讨论】:

    • 我不能在存储库中做类似的事情吗?
    • 它肯定会起作用。我正在寻找一种将其放入存储库的方法,因为与数据库事务相关的所有内容都在那里
    • 再次您好,我尝试了您提出的解决方案,但一直遇到不同的问题。我尝试了过去 8 个小时来找出为什么这不起作用,我希望你能帮助我。我在这里打开了另一个话题。 stackoverflow.com/questions/31097667/…
    • 像往常一样,您的解决方案根本不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2018-01-03
    相关资源
    最近更新 更多