是否可以使用带有Spring Data JPA的EntityManager创建视图?

时间:2017-03-23 07:08:32

标签: java mysql spring spring-data spring-data-jpa

我正在使用Spring Data JPA开展项目。我想在存储库中添加一些自定义行为。

目前我正在尝试通过执行方法来创建视图

存储库类如下。

public interface MyQueryRepository extends JpaRepository<MyQuery, Long>, MyQueryRepositoryCustom {
    public MyQuery findById(long id);
    public list executeMyQuery();

}

这是自定义:

public class MyQueryRepositoryImpl implements MyQueryRepositoryCustom {
    @PersistenceContext
    private EntityManager entityManager;

    public List executeMyQuery() {
        return entityManager.createQuery("CREATE VIEW result_set AS select record FROM my_data").getResultList();
    }
}

但是,我收到以下错误。

[ERROR] [http-bio-8080-exec-10] ErrorCounter - line 1:1: unexpected token: CREATE
antlr.NoViableAltException: unexpected token: CREATE
    at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:198) [hibernate-core-5.1.1.Final.jar:5.1.1.Final]

以上代码适用于SELECT查询。

还有其他方法,我可以使用实体管理器创建视图。提前致谢

1 个答案:

答案 0 :(得分:4)

要使用getResultList(),您必须选择而不是创建? UPDATE?或者删除。

因此,如果你想创建一个视图,那么你必须执行你的查询而不是getResultList()来创建一个我建议使用 CreateNativeQuery 的视图,例如:

Query q = entityManager.createNativeQuery("CREATE VIEW result_set AS 
                                           select record FROM my_data");
q.executeUpdate();

否则,如果您想从查询中获取值,则必须将查询更改为SELECT something FROM result_set