Spring JPA出现DB2错误SqlSyntaxErrorException

r6vfmomb  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(138)

我正在尝试创建一个Sping Boot 应用程序来从DB2视图读取数据
我的application.properties的数据源为:

spring.datasource.url=jdbc:db2://servername:port/dbname
spring.datasource.username=me
spring.datasource.password=mypass
spring.datasource.driver-class-name=com.ibm.db2.jcc.DB2Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DB2390Dialect

当我运行应用程序时,它出错,错误如下:
错误代码:DB2 SQL错误:数据库代码= -551,数据库状态=42501,数据库状态=me;创建表; DSNDB 04,驱动程序=4.29.24**
根据我的阅读,此错误意味着用户“me”没有运行操作“CREATE TABLE”的权限。
如果我替换www.example.com中的上述数据源设置application.properties,改用H2数据库,一切都正常。因此,我知道我的Java类等都正常工作,但我不确定如何解决此问题并从DB2视图读取数据。
顺便说一句,由于我在这里讨论的是数据库视图,所以我的实体用@Immutable:

@Entity
@Immutable
@Table(name = "CAR_VIEW") 
public class CarEntity implements Serializable {
   ...
}

如上所述,在H2中运行该代码将创建CAR_VIEW,我可以使用CommandLineRunner预先填充一些数据,然后还可以从Postman查询这些数据。
但是,我的DB2数据库已经有了这个视图和它提供的数据(通过连接几个表来获得视图中所需的数据)。所以对于DB2数据库,我不希望JPA/Hibernate创建新的CAR_VIEW(这是不应该的,因为我使用了ddl-auto=update),所以它应该看到视图已经存在,我应该不会收到这个错误。

scyqe7ek

scyqe7ek1#

结果是,我需要为我的Entity类提供模式,所以一旦我将模式添加到Table注解中,这个问题就解决了。
与上面的例子相比,我的实体类现在有如下注解:

@Entity
@Immutable
@Table(name = "CAR_VIEW", schema = "MY_SCHEMA") 
public class CarEntity implements Serializable {
   ...
}

相关问题