Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to get spring boot to automatically create database schema

I'm unable to get spring boot to automatically load my database schema when I start it up.

Here is my 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 

Here is my Application.java:

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

Here is a sample entity:

@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;     } } 

Any ideas what I'm doing wrong?

like image 226
napentathol Avatar asked Nov 12 '14 07:11

napentathol


People also ask

Does Hibernate create tables automatically?

If the table name/field name name is as same as the table name/column name, then you don't have to specify the name attribute. Here, we specify create for the hibernate. hbm2ddl. auto property so Hibernate will create a table from the entity class.


1 Answers

There are several possible causes:

  1. Your entity classes are in the same or in a sub-package relative one where you have you class with @EnableAutoConfiguration. If not then your spring app does not see them and hence will not create anything in db

  2. Check your config, it seems that you are using some hibernate specific options, try to replace them with:

    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= 

**note that the manual loading of the driver class is unnecessary because it's automatically registered, so don't bother yourself with it

  1. Your application.properties must be in src/main/resources folder.

If you did not specify dialect correctly it might try to default to bundled together with boot in-memory database and (as it was with me) I could see that it tries to connect to local HSQL (see console output) instance and fail at updating the schema.

like image 148
borys86 Avatar answered Oct 05 '22 22:10

borys86