【问题标题】:Creating Database view at startup - JPA在启动时创建数据库视图 - JPA
【发布时间】:2020-02-20 15:40:31
【问题描述】:

我正在使用 ddl-auto: create-drop 在启动时为我的应用程序创建架构 在我需要创建多个视图之前,一切都运行良好。我希望能够在启动时创建我的数据库视图

@Entity
@Immutable
@Table(name = "my_view")
@Subselect( "my query here" )
Public class MyView {

视图没有自动生成。

 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'db.my_view' doesn't exist
at sun.reflect.GeneratedConstructorAccessor74.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2490)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1966)
at sun.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
at com.sun.proxy.$Proxy196.executeQuery(Unknown Source)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70)

环境:Mysql、Spring boot、休眠

【问题讨论】:

  • Hibernate XML 文件中hibernate.hbm2ddl.auto 的值是多少?
  • 我使用的是 Spring Boot,我没有休眠 XML 文件。我猜 spring.jpa.hibernate.ddl-auto 正在做的伎俩。 PS:表正在被创建,只是视图没有被创建
  • 我不确定 Hibernate 是否会创建视图。可以将实体映射到视图,但不确定视图的创建。
  • 我相信你是对的,但我无法在任何地方的文档中弄清楚

标签: mysql hibernate spring-boot jpa


【解决方案1】:

您可以使用 Flyway 来初始化您的视图。

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-execute-flyway-database-migrations-on-startup

如果您走这条路,您可能希望通过将 hibernate.hbm2ddl.auto 切换为 validatenone 来充分使用 Flyway 作为您的架构,而不是使用 create-drop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多