有没有办法将MySQL存储过程中的对象列表返回给JPA?

时间:2014-02-20 18:53:50

标签: mysql jpa jpa-2.0

程序是:

CREATE PROCEDURE `hw1_db_1`.`r2_browse_movies_by_title`(IN str_title VARCHAR(200))
BEGIN
   SELECT * FROM `hw1_db_1`.`movies` WHERE title LIKE CONCAT('%', str_title, '%');
END

Stateless EJB中调用:

public List<Movie> searchTitles(String query) {
    StoredProcedureQuery nq = em
        .createStoredProcedureQuery("r2_browse_movies_by_title");
    nq.registerStoredProcedureParameter("str_title", String.class,
        ParameterMode.IN);
    return nq.setParameter("str_title", query).getResultList(); // unchecked cast
}

不幸的是,它不会返回List<Movie>,而是返回带有电影属性的List<Object[]>。有办法退回List<Movie>吗?任何编程方式转换?

1 个答案:

答案 0 :(得分:0)

我假设

    EntityManager.createStoredProcedureQuery(String procedureName, Class... resultClasses)
Create an instance of StoredProcedureQuery for executing a stored procedure in the database.

尝试将resultClasses传递给实体。

  

必须按照的顺序指定resultClass参数   结果集将由存储过程调用返回。

     

参数:       procedureName - 数据库中存储过程的名称       resultClasses - 要映射存储过程生成的结果集的类