起動時に Spring Boot でデータベース スキーマを自動的に読み込むことができません。
これが私の 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
考えられる原因はいくつかあります:
エンティティクラスは、クラスがあるのと同じか、またはサブパッケージの相対的なクラスにあります。
@EnableAutoConfiguration.
そうでない場合、Springアプリはそれらを認識せず、したがってDBに何も作成しません。設定を確認してください。Hibernate 固有のオプションを使用しているようですので、次のオプションに置き換えてみてください。
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.hibernate.ddl-auto=update spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=test spring.datasource.password=
**ドライバークラスは自動的に登録されるため、手動でロードする必要はありません。
- フォルダー
application.properties
内にある必要があります。src/main/resources
方言を正しく指定しなかった場合、デフォルトでブートインメモリデータベースと一緒にバンドルされ、(私の場合のように) ローカルHSQL
(コンソール出力を参照) インスタンスに接続しようとしてスキーマの更新に失敗する可能性があります。