【问题标题】:Is it possible to create a view using the EntityManager with Spring Data JPA?是否可以使用带有 Spring Data JPA 的 EntityManager 创建视图?
【发布时间】:2017-08-15 14:43:25
【问题描述】:

我正在使用 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 查询。

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

【问题讨论】:

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


    【解决方案1】:

    要使用 getResultList(),您必须进行 Select 而不是 CREATE?更新?或删除。

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 2020-07-13
      • 2019-09-01
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2022-07-11
      相关资源
      最近更新 更多