Есть ли способ позволить Spring Boot генерировать «ограничение сброса» с добавлением к нему if exists?

#java #sql #postgresql #spring-boot

#Ява #sql #postgresql #пружинный ботинок

Вопрос:

Для моего проекта я использую create-drop каждый раз, когда запускаю свой проект. Что происходит, так это то, что он удалит мои таблицы и ограничения в начале, но также и в конце выполнения. Это не было бы проблемой, если бы оно существовало, если бы в запросе оно выполнялось, но оно не генерирует это для ограничения отбрасывания, что означает, что оно выдает мне ошибку для него.. что меня раздражает.

Единственное различие между этими запросами, сгенерированными Spring Boot, заключается в следующем

 alter table adres  drop constraint FKt68mfknlp3yeqgxw45943p6vc  

и для отбрасывания столов это

 drop table if exists person cascade  

Это в основном отбрасывание таблиц и ограничений te в начале, но в первую очередь там ничего нет, потому что, когда я завершаю программу, она уже отбрасывает все при выходе. выпадающая таблица не выдает ошибку из-за того, что если существует, то существует ограничение. Я добавлю следующие классы для:

Класс персоны

 package com.example.PostID.Person;  import lombok.*;  import javax.persistence.*; import java.time.LocalDate; import java.time.Period; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set;  @Entity @Table @AllArgsConstructor @NoArgsConstructor @Data public class Person {   @Id  @SequenceGenerator(  name = "person_sequence",  sequenceName = "person_sequence",  allocationSize = 1  )   @GeneratedValue (  strategy = GenerationType.SEQUENCE,  generator = "person_sequence"  )   private Long id;  private String post_id;  private String name;  private String surname;  private String email;  private LocalDate dob;   @OneToMany(cascade=CascadeType.ALL)  @JoinColumn( name = "person_id", referencedColumnName = "id")  private Listlt;Adresgt; adressen = new ArrayListlt;Adresgt;();    @Transient  private Integer age;   public Person(String name,  String post_id,  String surname,  String email,  LocalDate dob  ) {  this.name = name;  this.post_id = post_id;  this.surname = surname;  this.email = email;  this.dob = dob;  ;  }    // get/set for age(different cause it calculates it based on Dob)  public Integer getAge() {  return Period.between(this.dob, LocalDate.now()).getYears();  }   public void setAge(Integer age) {  this.age = age;  }    }  

Класс адресов (адреса на голландском языке)

 package com.example.PostID.Person;  import lombok.*;  import javax.persistence.*;  @Entity @Table @Getter @Setter @AllArgsConstructor @NoArgsConstructor @ToString public class Adres {   @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private Long id;   private String postcode;  private String straatnaam;  private String huisnummer;   @ManyToOne(fetch = FetchType.LAZY)  private Person person;   public Adres(String postcode, String straatnaam, String huisnummer) {  this.postcode = postcode;  this.straatnaam = straatnaam;  this.huisnummer = huisnummer;  }  }  

error that occurs

 Hibernate:     alter table adres   drop constraint FKt68mfknlp3yeqgxw45943p6vc 2021-12-02 13:02:11.176 WARN 11924 --- [ main] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL "  alter table adres   drop constraint FKt68mfknlp3yeqgxw45943p6vc" via JDBC Statement  org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "  alter table adres   drop constraint FKt68mfknlp3yeqgxw45943p6vc" via JDBC Statement  at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlString(SchemaDropperImpl.java:375) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlStrings(SchemaDropperImpl.java:359) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.tool.schema.internal.SchemaDropperImpl.applyConstraintDropping(SchemaDropperImpl.java:331) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropFromMetadata(SchemaDropperImpl.java:230) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.tool.schema.internal.SchemaDropperImpl.performDrop(SchemaDropperImpl.java:154) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:126) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:112) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:145) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.internal.SessionFactoryImpl.lt;initgt;(SessionFactoryImpl.java:318) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.10.jar:5.3.10]  at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.10.jar:5.3.10]  at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.10.jar:5.3.10]  at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.10.jar:5.3.10]  at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.10.jar:5.3.10]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.10.jar:5.3.10]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.10.jar:5.3.10]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.10.jar:5.3.10]  at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.10.jar:5.3.10]  at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.10.jar:5.3.10]  at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.10.jar:5.3.10]  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.10.jar:5.3.10]  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.10.jar:5.3.10]  at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[spring-context-5.3.10.jar:5.3.10]  at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) ~[spring-context-5.3.10.jar:5.3.10]  at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.10.jar:5.3.10]  at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.5.jar:2.5.5]  at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.5.jar:2.5.5]  at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.5.jar:2.5.5]  at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.5.jar:2.5.5]  at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.5.jar:2.5.5]  at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.5.jar:2.5.5]  at com.example.PostID.PostIdApplication.main(PostIdApplication.java:10) ~[classes/:na] Caused by: org.postgresql.util.PSQLException: ERROR: relation "adres" does not exist  at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2552) ~[postgresql-42.2.23.jar:42.2.23]  at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2284) ~[postgresql-42.2.23.jar:42.2.23]  at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:322) ~[postgresql-42.2.23.jar:42.2.23]  at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:481) ~[postgresql-42.2.23.jar:42.2.23]  at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:401) ~[postgresql-42.2.23.jar:42.2.23]  at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:322) ~[postgresql-42.2.23.jar:42.2.23]  at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:308) ~[postgresql-42.2.23.jar:42.2.23]  at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:284) ~[postgresql-42.2.23.jar:42.2.23]  at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:279) ~[postgresql-42.2.23.jar:42.2.23]  at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94) ~[HikariCP-4.0.3.jar:na]  at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-4.0.3.jar:na]  at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]  ... 35 common frames omitted