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

B37*_*378 2 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();

}
Run Code Online (Sandbox Code Playgroud)

这是定制:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误。

[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]
Run Code Online (Sandbox Code Playgroud)

上面的代码适用于 SELECT 查询。

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

YCF*_*F_L 5

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

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

Query q = entityManager.createNativeQuery("CREATE VIEW result_set AS 
                                           select record FROM my_data");
q.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

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