복붙노트

[SPRING] 스프링 부트를 가져 와서 데이터베이스 스키마를 자동으로 만들 수 없습니다.

SPRING

스프링 부트를 가져 와서 데이터베이스 스키마를 자동으로 만들 수 없습니다.

나는 스프링 부트를 시작하여 데이터베이스 스키마를 시작할 때 자동으로로드 할 수 없습니다.

다음은 내 application.properties입니다.

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=test
spring.datasource.password=
spring.datasource.driverClassName = com.mysql.jdbc.Driver

spring.jpa.database = MYSQL

spring.jpa.show-sql = true

spring.jpa.hibernate.ddl-auto = create
spring.jpa.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy

다음은 내 Application.java입니다.

@EnableAutoConfiguration
@ComponentScan
public class Application {
    public static void main(final String[] args){
        SpringApplication.run(Application.class, args);
    }
}

다음은 샘플 엔티티입니다.

@Entity
@Table(name = "survey")
public class Survey implements Serializable {

    private Long _id;

    private String _name;

    private List<Question> _questions;

    /**
     * @return survey's id.
     */
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "survey_id", unique = true, nullable = false)
    public Long getId() {
        return _id;
    }

    /**
     * @return the survey name.
     */
    @Column(name = "name")
    public String getName() {
        return _name;
    }


    /**
     * @return a list of survey questions.
     */
    @OneToMany(mappedBy = "survey")
    @OrderBy("id")
    public List<Question> getQuestions() {
        return _questions;
    }

    /**
     * @param id the id to set to.
     */
    public void setId(Long id) {
        _id = id;
    }

    /**
     * @param name the name for the question.
     */
    public void setName(final String name) {
        _name = name;
    }

    /**
     * @param questions list of questions to set.
     */
    public void setQuestions(List<Question> questions) {
        _questions = questions;
    }
}

내가 뭘 잘못하고 있는거야?

해결법

  1. ==============================

    1.가능한 원인은 여러 가지가 있습니다.

    가능한 원인은 여러 가지가 있습니다.

    dialect를 올바르게 지정하지 않았다면 boot in-memory 데이터베이스와 함께 번들로 기본 설정을 시도 할 수 있으며 (나와 함께) 로컬 HSQL (콘솔 출력 참조) 인스턴스에 연결하려고 시도하고 업데이트시 실패합니다 스키마

  2. ==============================

    2.다음과 같이 실행 해 보셨습니까?

    다음과 같이 실행 해 보셨습니까?

    spring.jpa.generate-ddl=true
    

    그리고

    spring.jpa.hibernate.ddl-auto = create
    

    spring-boot-features를 보라.

  3. ==============================

    3.

    @SpringBootApplication
    @EnableConfigurationProperties
    @EntityScan(basePackages = {"com.project.ppaa.model"})  // scan JPA entities
    public class Application {
    
      private static ConfigurableApplicationContext applicationContext;
    
      public static void main(String[] args) {
        Application.applicationContext = SpringApplication.run(Application.class, args);
      }
    }
    

    자동으로 작동해야하지만 그렇지 않은 경우 기본 패키지를 입력 할 수 있습니다.

    @EntityScan(basePackages = {"com.project.ppaa.model"})  // scan JPA entities manually
    
  4. ==============================

    4.엔티티 클래스가 기본 클래스와 동일한 패키지에 없으면 기본 클래스에서 @EntityScan 주석을 사용하고 저장하거나 패키지 할 엔티티도 지정할 수 있습니다. 당신의 모델 패키지처럼.

    엔티티 클래스가 기본 클래스와 동일한 패키지에 없으면 기본 클래스에서 @EntityScan 주석을 사용하고 저장하거나 패키지 할 엔티티도 지정할 수 있습니다. 당신의 모델 패키지처럼.

    약:

    spring.jpa.hibernate.ddl-auto = create
    

    옵션 업데이트를 사용할 수 있습니다. 데이터를 지우지 않고 같은 방식으로 테이블을 생성합니다.

  5. ==============================

    5.나는 또한 같은 문제가있다. 다른 기본 속성 파일을 읽으려면 기본 Application 클래스에 @PropertySource 주석이 설정되어 있으므로 정상적인 "application.properties"는 더 이상 사용되지 않습니다.

    나는 또한 같은 문제가있다. 다른 기본 속성 파일을 읽으려면 기본 Application 클래스에 @PropertySource 주석이 설정되어 있으므로 정상적인 "application.properties"는 더 이상 사용되지 않습니다.

  6. ==============================

    6.다음 두 가지 설정을 사용하면 효과가 있습니다.

    다음 두 가지 설정을 사용하면 효과가 있습니다.

    spring.jpa.generate-ddl=true
    spring.jpa.hibernate.ddl-auto=create
    
  7. ==============================

    7.필자의 경우 JPArepository를 사용하고 있어도 테이블이 자동으로 생성되지 않았습니다. 내 springboot app application.properties 파일에 아래 속성을 추가하면 테이블이 자동으로 생성됩니다. spring.jpa.hibernate.ddl-auto = update

    필자의 경우 JPArepository를 사용하고 있어도 테이블이 자동으로 생성되지 않았습니다. 내 springboot app application.properties 파일에 아래 속성을 추가하면 테이블이 자동으로 생성됩니다. spring.jpa.hibernate.ddl-auto = update

  8. ==============================

    8.Spring Boot Version과 다운로드 한 라이브러리 버전을 고려한 설정을 제공해야합니다.

    Spring Boot Version과 다운로드 한 라이브러리 버전을 고려한 설정을 제공해야합니다.

    Spring Boot 설정이 Hibernate v4를 다운로드 한 경우에만 아래를 사용하십시오.

    Hibernate 5는 위와 같이 지원하지 않는다.

    Spring Boot Setup이 Hibernate v5.x를 다운로드했다면, 다음 정의를 선호하십시오 :

    중대한: Spring Boot 애플리케이션 개발에서, 주석을 사용하는 것을 선호해야한다 : @SpringBootApplication은 수퍼 - 어노테이션으로 @SpringBootConfiguration과 @EnableAutoConfiguration

    지금 엔티티 클래스가 메인 클래스가 상주하는 패키지와 다른 패키지에 있다면, 스프링 부트는 그 패키지를 검사하지 않습니다.

    따라서 주석을 명시 적으로 정의해야합니다. @EntityScan (basePackages = { "com.springboot.entities"}) 이 주석은 JPA 기반의 주석 처리 된 엔티티 클래스 (MongoDB, Cassandra 등)

    노트: "com.springboot.entities"는 사용자 정의 패키지 이름입니다.

    다음은 테이블을 생성하기 위해 application.properties에서 Hibernate와 JPA 기반의 속성을 정의한 방법이다.

    위의 구성을 사용하여 테이블을 만들 수 있습니다.

    해당되는 곳을 참조하고 코드를 변경하십시오.

  9. ==============================

    9.나는 같은 문제를 가지고 있으며 다음과 같이이 문제를 해결했다.

    나는 같은 문제를 가지고 있으며 다음과 같이이 문제를 해결했다.

    spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
    
  10. ==============================

    10.

    Use this Sample code
    
    application.properties
    # DataSource settings: set here your own configurations for the database 
    # connection. In this example we have "dojsb" as database name and 
    # "root" as username and password.
    spring.datasource.url =jdbc:postgresql://localhost:5432/usman
    spring.datasource.username = postgres
    spring.datasource.password = 12345
    
    # Keep the connection alive if idle for a long time (needed in production)
    spring.datasource.testWhileIdle = true
    spring.datasource.validationQuery = SELECT 1
    
    # Show or not log for each sql query
    spring.jpa.show-sql = true
    
    # Hibernate ddl auto (create, create-drop, update)
    spring.jpa.hibernate.ddl-auto = create
    
    # Naming strategy
    spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
    
    # Use spring.jpa.properties.* for Hibernate native properties (the prefix is
    # stripped before adding them to the entity manager)
    
    # The SQL dialect makes Hibernate generate better SQL for the chosen database
    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
    
    server.port = 8963
    
    
    
    Entity Class:
    
    
    
    import java.sql.Timestamp;
    import java.util.UUID;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    import org.hibernate.annotations.Type;
    
    
    @Entity
    @Table(name = "QUEUERECORDS")
    public class QueuesRecords {
        @Id
        private UUID id;
    
        @Column(name="payload", nullable = true)
        @Type(type="text")
        private String payload;
    
    
        @Column(name="status", nullable = true)
        @Type(type="text")
        private String status;
    
        private Timestamp starttime;
    
        private Timestamp endtime;
    
        @Column(name="queueid",nullable= true)
        @Type(type="text")
        private String queueid;
    
        public UUID getId() {
            return id;
        }
    
        public void setId(UUID id) {
            this.id = id;
        }
    
        public String getPayload() {
            return payload;
        }
    
        public void setPayload(String payload) {
            this.payload = payload;
        }
    
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    
        public Timestamp getStarttime() {
            return starttime;
        }
    
        public void setStarttime(Timestamp starttime) {
            this.starttime = starttime;
        }
    
        public Timestamp getEndtime() {
            return endtime;
        }
    
        public void setEndtime(Timestamp endtime) {
            this.endtime = endtime;
        }
    
        public String getQueueid() {
            return queueid;
        }
    
        public void setQueueid(String queueid) {
            this.queueid = queueid;
        }
    
    
    
    }
    
    
    
    Main class
    
    
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    
    @SpringBootApplication
    public class Test{
    
        public static void main(String[] args) {
    
            SpringApplication.run(Test.class, args);
    
    
        }
    }
    
  11. ==============================

    11.전에도 같은 문제가있었습니다. 내 문제는 "목록"을 사용하여 설정하려고했던 엔티티 관계입니다. 나는 프로그램이리스트 변수없이 잘 돌아갔 기 때문에 그것이 원인이라고 생각했다. 귀하의 경우에는 문제가 있다고 생각합니다.

    전에도 같은 문제가있었습니다. 내 문제는 "목록"을 사용하여 설정하려고했던 엔티티 관계입니다. 나는 프로그램이리스트 변수없이 잘 돌아갔 기 때문에 그것이 원인이라고 생각했다. 귀하의 경우에는 문제가 있다고 생각합니다.

    private List<Question> _questions;
    

    나는 당신에게 이미 질문이라는 이름의 수업이 있다고 가정하고 있습니다. 그래서, 가지고보십시오 :

    @OneToMany
    private Question _questions;
    

    그러나 문제는 귀하의 방법에서 그것을 처리하여 목록을 반환한다는 것입니다. 나는 Spring Data JPA를 CrudRepository와 함께 사용했다. 그래서, 당신이 그것을 사용하기로 결정한다면 당신의 모습은 다음과 같을 것입니다 :

    public List<Question> findById( Long _id );
    

    더 많은 변경이 필요 하겠지만, 매우 쉽고 간단합니다. 더 잘 이해하고 수정할 필요가있는 것을 보려면이 Java Brains 비디오를 참조하십시오.

  12. ==============================

    12.Spring.jpa.hibernate.ddl-auto = create 후 세미콜론을 추가합니다. which is wrong spring.jpa.hibernate.ddl-auto = 충분하게 만듭니다.

    Spring.jpa.hibernate.ddl-auto = create 후 세미콜론을 추가합니다. which is wrong spring.jpa.hibernate.ddl-auto = 충분하게 만듭니다.

  13. ==============================

    13.다음과 같이 createdataBaseIfNotExist = true를 추가하면됩니다.

    다음과 같이 createdataBaseIfNotExist = true를 추가하면됩니다.

    spring.datasource.url=jdbc:mysql://localhost:3306/test?createDatabaseIfNotExist=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=utf-8&amp;amp;autoReconnect=true
    

    application.properties 파일

  14. ==============================

    14.추가 만하면됩니다.

    추가 만하면됩니다.

    spring.jpa.databaseplatform=org.hibernate.dialect.PostgreSQLDialect  
    

    결국. 이렇게하면 문제가 해결됩니다. 이 부분 만 누락되었습니다.

  15. from https://stackoverflow.com/questions/26881739/unable-to-get-spring-boot-to-automatically-create-database-schema by cc-by-sa and MIT license