![](/img/trans.png)
[英]Validate “spring.jpa.hibernate.ddl-auto” during springboot startup
[英]spring.jpa.hibernate.ddl-auto=create is not working in Hibernate 5 with SpringBoot 2.0
我創建了一個SpringBoot 1.5.11.RELEASE
和Hibernate 5 project
。 一切都很好。
但是,當我將SpringBoot
版本更改為2.0.0.RELEASE
, spring.jpa.hibernate.ddl-auto=create
不起作用。 我已經嘗試過這個stackoverflow帖子 ,但是沒有運氣。
這是SpringBoot 1.5.11.RELEASE
的堆棧跟蹤:
2018-04-06 16:27:52.512 INFO 6792 --- [main] j.LocalContainerEntityManagerFactoryBean:為持久性單元'default'構建JPA容器EntityManagerFactory 2018-04-06 16:27:52.526 INFO 6792 --- [main] o.hibernate.jpa.internal.util.LogHelper:HHH000204:處理PersistenceUnitInfo [名稱:默認...] 2018-04-06 16:27:52.587 INFO 6792 --- [main] org.hibernate.Version
:HHH000412:Hibernate Core {5.0.12.Final} 2018-04-06 16:27:52.589 INFO 6792 --- [main] org.hibernate.cfg.Environment
:HHH000206:找不到hibernate.properties 2018-04-06 16:27:52.591信息6792 --- [main] org.hibernate.cfg.Environment
:HHH000021:字節碼提供者名稱:javassist 2018-04-06 16:27:52.735 INFO 6792 --- [main] o.hibernate.annotations.common.Version:HCANN000001:Hibernate Commons Annotations {5.0.1.Final} 2018- 04-06 16:27:52.833 INFO 6792--[main] org.hibernate.dialect.Dialect:HHH000400:使用方言:org.hibernate.dialect.MySQL5Dialect 2018-04-06 16:27:53.180 INFO 6792- -[main] org.hibernate.tool.hbm2ddl.SchemaExport:HHH000227:運行hbm2ddl模式導出Hibernate:刪除表(如果存在的話)Hibernate:創建表的人(ID整數不為null auto_increment,名稱varchar(255),主鍵(id) )2018-04-06 16:27:53.619信息6792 --- [
主要] org.hibernate.tool.hbm2ddl.SchemaExport:HHH000230:模式導出完成2018-04-06 16:27:53.646信息6792 --- [
main] j.LocalContainerEntityManagerFactoryBean:為持久性單元“ default”建立的JPA EntityManagerFactory SessionFactory創建於2018-04-06 16:27:54.528 WARN 6792 --- [main] org.hibernate.orm.connections:HHH10001002:使用內置的Hibernate連接池(不適用於生產!)2018-04-06 16:27:54.529信息6792 --- [main] org.hibernate.orm.connections:HHH10001005:在URL使用驅動程序[com.mysql.jdbc.Driver] [jdbc:mysql:// localhost:3306 / hotel] 2018-04-06 16:27:54.529信息6792 --- [main] org.hibernate.orm.connections:HHH10001001:連接屬性:{user = root,password = ****} 2018-04-06 16:27:54.529 INFO 6792 --- [main] org.hibernate.orm.connections:HHH10001003:自動提交模式:false 2018-04-06 16:27:54.532 INFO 6792 --- [main] .ciDriverManagerConnectionProviderImpl:HHH000115:休眠連接池大小:10(min = 1)2018-04-06 16:27:54.539 INFO 6792 --- [main] org.hibernate.dialect.Dialect:HHH000400:使用方言:org.hibernate.dialect.MySQL5Dia lect 2018-04-06 16:27:54.855信息6792 --- [main] osjeaAnnotationMBeanExporter:在啟動Hibernate時為JMX暴露注冊bean:插入人員(名稱)值(?)已保存! 2018-04-06 16:27:54.954信息6792 --- [main] com.hib.Hibernate5Application:在4.051秒內啟動了Hibernate5Application(JVM運行4.802)
這是SpringBoot 2.0.0.RELEASE
的堆棧跟蹤:
SessionFactory創建於2018-04-06 16:24:17.011信息5092 --- [
main] org.hibernate.Version:HHH000412:Hibernate Core {5.2.14.Final} 2018-04-06 16:24:17.013 INFO 5092 --- [
main] org.hibernate.cfg.Environment:HHH000206:hibernate.properties not found 2018-04-06 16:24:17.915 INFO 5092 --- [main] o.hibernate.annotations.common.Version:HCANN000001:Hibernate Commons Annotations {5.0.1.Final} 2018-04-06 16:24:17.989 WARN 5092 --- [main] org.hibernate.orm.connections.pooling:HHH10001002:使用Hibernate內置連接池(不適用於生產! )2018-04-06 16:24:17.994信息5092--[main] org.hibernate.orm.connections.pooling:HHH10001005:使用URL [jdbc:mysql:/上的驅動程序[com.mysql.jdbc.Driver] / localhost:3306 / hotel] 2018-04-06 16:24:17.994 INFO 5092 --- [main] org.hibernate.orm.connections.pooling:HHH10001001:連接屬性:{user = root,password = *** *} 2018-04-06 16:24:17.994 INFO 5092 --- [main] org.hibernate.orm.connections.pooling:HHH10001003:自動提交模式:false 2018-04-06 16:24:17.996 INFO 5092- -[main] .ciDriverManagerConnectionProviderImpl:HHH000115:休眠連接池大小:10(最小= 1)2018-04-06 16:24:18.230 INFO 5092 --- [main] org.hibernate.dialect.Dialect:HHH000400:使用方言:org.hibernate.dialect.MySQL5Dialect 2018-04-06 16:24:19.041 INFO 5092 --- [main] com.zaxxer.hikari.HikariDataSource:HikariPool-1-開始... 2018-04-06 16:24:19.058 INFO 5092 --- [
main] com.zaxxer.hikari.HikariDataSource:HikariPool-1-開始完成。2018-04-06 16:24:19.419 INFO 5092 --- [main] osjeaAnnotationMBeanExporter:在啟動時注冊JMX暴露的bean 2018-04-06 16:24:19.420 INFO 5092 --- [
[main] osjeaAnnotationMBeanExporter:已自動檢測到名稱為“ dataSource”的Bean以進行JMX暴露2018-04-06 16:24:19.427 INFO 5092 --- [main] osjeaAnnotationMBeanExporter:位於MBean的“ dataSource”:向JMX服務器注冊為MBean [com] .zaxxer.hikari:name = dataSource,type = HikariDataSource] 2018-04-06 16:24:19.441 INFO 5092 --- [main] com.hib.Hibernate5Application:在3.742秒內啟動Hibernate5Application(JVM運行4.541)Hibernate:插入到人(名字)中的值(?)已保存!
Hibernate 5
配置:
@Configuration
public class HinernateConfig {
private StandardServiceRegistry standardServiceRegistry;
private SessionFactory sessionFactory;
@Bean
public SessionFactory sessionFactory() {
try {
standardServiceRegistry = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(standardServiceRegistry).getMetadataBuilder().build();
sessionFactory = metadata.getSessionFactoryBuilder().build();
return sessionFactory;
} catch (Exception e) {
System.out.println("Exception occured while creating SessionFactory");
e.printStackTrace();
if (standardServiceRegistry != null) {
StandardServiceRegistryBuilder.destroy(standardServiceRegistry);
}
}
return sessionFactory;
}
@PostConstruct
public void post() {
System.out.println("SessionFactory Created");
}
}
主要用途:
@SpringBootApplication
public class Application implements CommandLineRunner {
private SessionFactory sessionFactory;
public Application(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) throws Exception {
Session session = sessionFactory.openSession();
session.beginTransaction();
Person person = new Person("Mehraj Malik");
session.save(person);
System.out.println("Saved!!");
session.getTransaction().commit();
session.close();
}
}
Hibernate Xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hotel</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">admin</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<mapping class="com.hib.entity.Person"/>
</session-factory>
</hibernate-configuration>
application.properties
spring.datasource.url = jdbc:mysql://localhost:3306/Hotel
spring.datasource.username=root
spring.datasource.password=admin
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
在Boot 2.0堆棧跟蹤中,以下部分沒有出現:
運行hbm2ddl模式導出休眠:如果存在人員則刪除表休眠:創建表人員(ID整數不為null auto_increment,名稱varchar(255),主鍵(id))
GitHub: https : //github.com/Mehraj123/Hib5Boot2.0
正如M.Deinum所提到的,我已經刪除了以下類和資源文件,並且可以正常工作:
以及主要應用的變化
@SpringBootApplication
public class Hibernate5Application implements CommandLineRunner {
private EntityManagerFactory managerFactory;
public Hibernate5Application(EntityManagerFactory managerFactory) {
this.managerFactory = managerFactory;
}
public static void main(String[] args) {
SpringApplication.run(Hibernate5Application.class, args);
}
@Override
@Transactional
public void run(String... args) throws Exception {
EntityManager entityManager = managerFactory.createEntityManager();
entityManager.getTransaction().begin();
Person person = new Person("Mehraj Malik");
entityManager.persist(person);
System.out.println("Saved!!");
entityManager.close();
}
}
我已經更新了我的github倉庫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.