[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.가능한 원인은 여러 가지가 있습니다.
가능한 원인은 여러 가지가 있습니다.
dialect를 올바르게 지정하지 않았다면 boot in-memory 데이터베이스와 함께 번들로 기본 설정을 시도 할 수 있으며 (나와 함께) 로컬 HSQL (콘솔 출력 참조) 인스턴스에 연결하려고 시도하고 업데이트시 실패합니다 스키마
-
==============================
2.다음과 같이 실행 해 보셨습니까?
다음과 같이 실행 해 보셨습니까?
spring.jpa.generate-ddl=true
그리고
spring.jpa.hibernate.ddl-auto = create
spring-boot-features를 보라.
-
==============================
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.엔티티 클래스가 기본 클래스와 동일한 패키지에 없으면 기본 클래스에서 @EntityScan 주석을 사용하고 저장하거나 패키지 할 엔티티도 지정할 수 있습니다. 당신의 모델 패키지처럼.
엔티티 클래스가 기본 클래스와 동일한 패키지에 없으면 기본 클래스에서 @EntityScan 주석을 사용하고 저장하거나 패키지 할 엔티티도 지정할 수 있습니다. 당신의 모델 패키지처럼.
약:
spring.jpa.hibernate.ddl-auto = create
옵션 업데이트를 사용할 수 있습니다. 데이터를 지우지 않고 같은 방식으로 테이블을 생성합니다.
-
==============================
5.나는 또한 같은 문제가있다. 다른 기본 속성 파일을 읽으려면 기본 Application 클래스에 @PropertySource 주석이 설정되어 있으므로 정상적인 "application.properties"는 더 이상 사용되지 않습니다.
나는 또한 같은 문제가있다. 다른 기본 속성 파일을 읽으려면 기본 Application 클래스에 @PropertySource 주석이 설정되어 있으므로 정상적인 "application.properties"는 더 이상 사용되지 않습니다.
-
==============================
6.다음 두 가지 설정을 사용하면 효과가 있습니다.
다음 두 가지 설정을 사용하면 효과가 있습니다.
spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto=create
-
==============================
7.필자의 경우 JPArepository를 사용하고 있어도 테이블이 자동으로 생성되지 않았습니다. 내 springboot app application.properties 파일에 아래 속성을 추가하면 테이블이 자동으로 생성됩니다. spring.jpa.hibernate.ddl-auto = update
필자의 경우 JPArepository를 사용하고 있어도 테이블이 자동으로 생성되지 않았습니다. 내 springboot app application.properties 파일에 아래 속성을 추가하면 테이블이 자동으로 생성됩니다. spring.jpa.hibernate.ddl-auto = update
-
==============================
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.나는 같은 문제를 가지고 있으며 다음과 같이이 문제를 해결했다.
나는 같은 문제를 가지고 있으며 다음과 같이이 문제를 해결했다.
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
-
==============================
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.전에도 같은 문제가있었습니다. 내 문제는 "목록"을 사용하여 설정하려고했던 엔티티 관계입니다. 나는 프로그램이리스트 변수없이 잘 돌아갔 기 때문에 그것이 원인이라고 생각했다. 귀하의 경우에는 문제가 있다고 생각합니다.
전에도 같은 문제가있었습니다. 내 문제는 "목록"을 사용하여 설정하려고했던 엔티티 관계입니다. 나는 프로그램이리스트 변수없이 잘 돌아갔 기 때문에 그것이 원인이라고 생각했다. 귀하의 경우에는 문제가 있다고 생각합니다.
private List<Question> _questions;
나는 당신에게 이미 질문이라는 이름의 수업이 있다고 가정하고 있습니다. 그래서, 가지고보십시오 :
@OneToMany private Question _questions;
그러나 문제는 귀하의 방법에서 그것을 처리하여 목록을 반환한다는 것입니다. 나는 Spring Data JPA를 CrudRepository와 함께 사용했다. 그래서, 당신이 그것을 사용하기로 결정한다면 당신의 모습은 다음과 같을 것입니다 :
public List<Question> findById( Long _id );
더 많은 변경이 필요 하겠지만, 매우 쉽고 간단합니다. 더 잘 이해하고 수정할 필요가있는 것을 보려면이 Java Brains 비디오를 참조하십시오.
-
==============================
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.다음과 같이 createdataBaseIfNotExist = true를 추가하면됩니다.
다음과 같이 createdataBaseIfNotExist = true를 추가하면됩니다.
spring.datasource.url=jdbc:mysql://localhost:3306/test?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
application.properties 파일
-
==============================
14.추가 만하면됩니다.
추가 만하면됩니다.
spring.jpa.databaseplatform=org.hibernate.dialect.PostgreSQLDialect
결국. 이렇게하면 문제가 해결됩니다. 이 부분 만 누락되었습니다.
from https://stackoverflow.com/questions/26881739/unable-to-get-spring-boot-to-automatically-create-database-schema by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring - ServletContextListener에 의존성 주입 (0) | 2018.12.08 |
---|---|
[SPRING] @ResponseBody를 사용하여 Spring Controller에서 JSON 데이터를 반환하는 방법 (0) | 2018.12.08 |
[SPRING] 스프링 부트 애플리케이션을 프로그래밍 방식으로 종료 (0) | 2018.12.08 |
[SPRING] START_OBJECT 토큰에서 java.util.ArrayList의 인스턴스를 deserialize 할 수 없습니다. (0) | 2018.12.08 |
[SPRING] AngularJS html5Mode로 봄 부팅 (0) | 2018.12.08 |