spring.jpa.hibernate.ddl-auto=create не работает в Hibernate 5 с SpringBoot 2.0
Я создал SpringBoot 1.5.11.RELEASE
а также Hibernate 5 project
, Все работало нормально.
Тем не менее, когда я изменился SpringBoot
версия для 2.0.0.RELEASE
spring.jpa.hibernate.ddl-auto=create
не работает. Я попробовал этот пост stackru, но не повезло.
Вот след стека SpringBoot 1.5.11.RELEASE
:
2018-04-06 16:27:52.512 INFO 6792 --- [main] j.LocalContainerEntityManagerFactoryBean: сборка контейнера JPA EntityManagerFactory для единицы сохраняемости 'default' 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 ИНФОРМАЦИЯ 6792 --- [главная] 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 INFO 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: удалить таблицу, если существует person Hibernate: создать таблицу person (целое число id не равно auto_increment, name varchar(255), первичный ключ (id)) 2018-04-06 16: 27: 53.619 INFO 6792 --- [
main] org.hibernate.tool.hbm2ddl.SchemaExport: HHH000230: экспорт схемы завершен 2018-04-06 16: 27: 53.646 INFO 6792 --- [
main] j.LocalContainerEntityManagerFactoryBean: Инициализированный JPA EntityManagerFactory для единицы сохраняемости 'default' SessionFactory Создан 2018-04-06 16:27:54.528 WARN 6792 --- [ main] org.hibernate.orm.connections: HHH10001002: Использование встроенного Hibernate пул соединений (не для производственного использования!) 2018-04-06 16:27:54.529 INFO 6792 --- [ main] org.hibernate.orm.connections: HHH10001005: с помощью драйвера [com.mysql.jdbc.Driver] по URL [jdbc:mysql://localhost:3306/hotel] 2018-04-06 16:27:54.529 INFO 6792 --- [ main] org.hibernate.orm.connections: HHH10001001: Свойства соединения: {user=root, пароль =****} 2018-04-06 16:27:54.529 ИНФОРМАЦИЯ 6792 --- [main] org.hibernate.orm.connections: HHH10001003: Режим автоматической фиксации: false 2018-04-06 16: 27: 54.532 ИНФОРМАЦИЯ 6792 --- [main].ciDriverManagerConnectionProviderImpl: HHH000115: Размер пула соединений Hibernate: 10 (мин = 1) 2018-04-06 16: 27: 54.539 INFO 6792 --- [ main] org.hibernate.dialect.Dialect: HHH000400: Используя диалект: org.hibernate.dialect.MySQL5Dialect 2018-04-06 16:27:54.855 INFO 6792 --- [ main] osjeaAnnotationMBeanExporter: Регистрация bean-компонентов для воздействия JMX при запуске Hibernate: вставка в личные (имя) значения (?) Сохранено!! 2018-04-06 16:27:54.954 INFO 6792 --- [ main] com.hib.Hibernate5Application: запуск приложения Hibernate5 через 4.051 секунды (JVM работает в течение 4.802)
Вот след стека SpringBoot 2.0.0.RELEASE
:
SessionFactory Создано 2018-04-06 16:24:17.011 ИНФОРМАЦИЯ 5092 --- [
main] org.hibernate.Version: HHH000412: Ядро гибернации {5.2.14.Final} 2018-04-06 16: 24: 17.013 INFO 5092 --- [
main] org.hibernate.cfg.Environment: HHH000206: hibernate.properties не найден 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: использование драйвера [com.mysql.jdbc.Driver] по URL-адресу [jdbc: mysql: / / localhost: 3306 / hotel] 2018-04-06 16:24:17.994 INFO 5092 --- [ main] org.hibernate.orm.connections.pooling: HHH10001001: Свойства соединения: {пользователь = root, пароль =****} 2018-04-06 16:24:17.994 ИНФОРМАЦИЯ 5092 --- [main] org.hibernate.orm.connections.pooling: HHH10001003: Режим автоматической фиксации: false 2018-04-06 16: 24: 17.996 ИНФОРМАЦИЯ 5092 - - [main].ciDriverManagerConnectionProviderImpl: HHH000115: Размер пула соединений Hibernate: 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 - Starting... 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 при запуске 2018-04-06 16: 24: 19.420 INFO 5092 --- [
main] osjeaAnnotationMBeanExporter: Бин с именем "dataSource" был автоматически обнаружен для 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: запущено Hibernate5Application за 3,742 секунды (JVM работает в течение 4,5541) 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 Hibernate: удалить таблицу, если существует person Hibernate: создать таблицу person (целое число, не ноль auto_increment, имя varchar (255), первичный ключ (id))
1 ответ
Как упомянул M.Deinum, я удалил следующие классы и файл ресурсов, и это работает:
- HinernateConfig
- hibernate.cfg.xml
И изменения в основном приложении
@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