【问题标题】:Database is not being automatically created in Spring boot在 Spring Boot 中没有自动创建数据库
【发布时间】:2021-03-04 01:46:11
【问题描述】:

我有一个使用 jpa 和 postgresql 的 Spring boot Api,并且应该在我运行应用程序时自动创建表。

但出现以下错误信息:

> 
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.globalsys.apicep.model.Cep.Cidade in com.globalsys.apicep.model.Cidade.ceps
    at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:844) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
    at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:795) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
    at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:53) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1693) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1661) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:286) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1224) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1255) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.1.jar:5.3.1]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.1.jar:5.3.1]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.1.jar:5.3.1]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

这是我的 application.properties

server.port=8080
spring.datasource.url=jdbc:postgresql://localhost:5432/dbcep
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.username=postgres
spring.datasource.password=romulo
spring.jpa.open-in-view=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false

【问题讨论】:

  • 在 POJO 中,您正在映射错误的目标实体。纠正它,然后它会起作用。属性看起来不错。我认为您使用的是(ManyToOne 或 ManyToMany 等),所以您犯了一个错误。
  • 听起来对我来说是正确的,有什么问题?我将编辑问题以添加 pojo 模型

标签: postgresql spring-boot jpa


【解决方案1】:

好消息!问题是映射属性中的一个引用,我一开始认为没有错。

在 OneToMany anootation 中,我以这种方式引用表格本身!

@OneToMany(mappedBy = "Cidade", cascade = CascadeType.ALL)
    private List<Cep> ceps;

原来你不能参考表格本身!相反,您需要引用关系另一方的属性,即关系的所有者!

 @ManyToOne
    private Cidade cidade;

在 Cep 类模型中!

【讨论】:

    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 2014-12-27
    • 2019-01-12
    • 2017-10-08
    • 2017-01-16
    • 2014-04-10
    • 1970-01-01
    • 2015-01-08
    相关资源
    最近更新 更多