No se puede obtener el arranque de resorte para crear automáticamente el esquema de la base de datos

No puedo obtener el arranque de spring para cargar automáticamente el esquema de mi base de datos cuando lo inicio.

Aquí está mi 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 

Aquí está mi Application.java:

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

Aquí hay una entidad de muestra:

 @Entity @Table(name = "survey") public class Survey implements Serializable { private Long _id; private String _name; private List _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 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 questions) { _questions = questions; } } 

¿Alguna idea de lo que estoy haciendo mal?

Hay varias causas posibles:

  1. Sus clases de entidad están en el mismo sub paquete o en un @EnableAutoConfiguration. relativo donde tiene su clase con @EnableAutoConfiguration. Si no, entonces su aplicación de spring no los ve y por lo tanto no creará nada en DB
  2. Verifique su configuración, parece que está utilizando algunas opciones específicas de hibernación, intente reemplazarlas por:

     spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.hibernate.ddl-auto=update spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=test spring.datasource.password= 
  3. Su application.properties debe estar en la carpeta src/main/resources .

Si no especificó el dialecto correctamente, podría tratar de agruparse de forma predeterminada con la base de datos de inicio en memoria y (como lo hizo conmigo) pude ver que intenta conectarse a la instancia HSQL local (ver salida de la consola) y no actualizar el esquema

¿Has intentado ejecutarlo con:

 spring.jpa.generate-ddl=true 

y entonces

 spring.jpa.hibernate.ddl-auto = create 

Por defecto, la ejecución (o validación) de DDL se aplaza hasta que se haya iniciado ApplicationContext. También hay un indicador spring.jpa.generate-ddl, pero no se usa si la configuración automática de Hibernate está activa porque las configuraciones de ddl-auto son más precisas.

ver las características de spring-boot

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

debería funcionar automáticamente, pero si no lo hace, puede ingresar el paquete base

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

Si su clase de entidad no está en el mismo paquete que su clase principal, puede usar la anotación @EntityScan en la clase principal, especificando la entidad que desea guardar o paquete también. Al igual que su paquete modelo.

Acerca de:

 spring.jpa.hibernate.ddl-auto = create 

Puedes usar la opción de update . No borrará ningún dato, y creará tablas de la misma manera.

También tengo el mismo problema. Resultó que tengo la anotación @PropertySource establecida en la clase de aplicación principal para leer un archivo de propiedades base diferente, por lo que ya no se usa la “aplicación.propiedades”.

En mi caso, las tablas no se creaban automáticamente aunque estaba usando JPArepository. Después de agregar la propiedad siguiente en mi aplicación springboot application.properties, las tablas ahora se crean automáticamente. spring.jpa.hibernate.ddl-auto = actualización

Usar las dos configuraciones siguientes funciona.

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

Debe proporcionar configuraciones teniendo en cuenta su versión de arranque de spring y la versión de las bibliotecas que descarga en función de la misma.

Mi configuración: Spring Boot 1.5.x (1.5.10 en mi caso) descarga Hibernate v5.x

Use debajo solo si su configuración Spring Boot ha descargado Hibernate v4.

spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy

Hibernate 5 no es compatible anteriormente.

Si su Spring Boot Setup ha descargado Hibernate v5.x, entonces prefiera la siguiente definición:

spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

IMPORTANTE: en el desarrollo de la aplicación Spring Boot, debería preferir utilizar la anotación: @SpringBootApplication que ha sido super-anotada con: @SpringBootConfiguration and @EnableAutoConfiguration

AHORA Si sus clases de entidad están en un paquete diferente que el paquete en el que reside su clase principal, Spring Boot no escaneará esos paquetes.

Por lo tanto, debe definir explícitamente Annotation: @EntityScan(basePackages = { "com.springboot.entities" })
Esta anotación explora las clases de entidad anotadas basadas en JPA (y otras como MongoDB, Cassandra, etc.)

NOTA: “com.springboot.entities” es el nombre del paquete personalizado.

A continuación se muestra la forma en que he definido las propiedades basadas en Hibernate y JPA en application.properties para crear tablas: –

spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.url = jdbc: mysql: // localhost: 3333 / development? useSSL = true spring.datasource.username = admin
spring.datasource.password =

spring.jpa.open-in-view = falso
spring.jpa.hibernate.ddl-auto = create
spring.jpa.generate-ddl = true
spring.jpa.hibernate.use-new-id-generator-mappings = true
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.hibernate.naming.strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.show-sql = true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.format_sql = true

Puedo crear tablas usando mi configuración mencionada anteriormente.

Remítalo y cambie su código donde corresponda.

Tuve el mismo problema y lo resolví con solo este complemento:

 spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect 
 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); } } 

Yo tuve el mismo problema antes. Mi problema era la relación de la Entidad que estaba tratando de establecer al usar una “Lista”. Sabía que era la causa porque el progtwig funcionaba bien sin la variable de la lista. En tu caso, creo que el problema es:

 private List _questions; 

Supongo que ya tienes una clase llamada Pregunta. Por lo tanto, intente tener:

 @OneToMany private Question _questions; 

Pero el problema es que, en su método, lo manejará para que le devuelva una lista. Usé Spring Data JPA con CrudRepository. Entonces, si decides usarlo, el tuyo puede verse así:

 public List findById( Long _id ); 

Hay más cambios que tendrá que hacer, pero estos son bastante fáciles y directos. Consulte este video de Java Brains para tener una mejor comprensión y ver qué más necesita modificarse.

Simple, estamos agregando punto y coma después
spring.jpa.hibernate.ddl-auto = create;
Cuál está mal
spring.jpa.hibernate.ddl-auto = create
suficiente

Solo agrega

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

al final. Esto resolverá tu problema. Solo faltaba esto