Исключение гибернации при попытке запуска Tomcat - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть приложение на spring-mvc + jpa.Я строю войну и пытаюсь запустить на tomcat.

DataConfig:

import org.hibernate.ejb.HibernatePersistence;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.annotation.Resource;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.Properties;

@Configuration
@EnableTransactionManagement
@PropertySource("classpath:app.properties")
public class DataConfig {

    private static final String PROP_DATABASE_DRIVER = "db.driver";
    private static final String PROP_DATABASE_URL = "db.url";
    private static final String PROP_DATABASE_USERNAME = "db.username";
    private static final String PROP_HIBERNATE_DIALECT = "db.hibernate.dialect";
    private static final String PROP_HIBERNATE_SHOW_SQL = "db.hibernate.show_sql";
    private static final String PROP_ENTITYMANAGER_PACKAGES_TO_SCAN = "db.entitymanager.packages.to.scan";
    private static final String PROP_HIBERNATE_HBM2DDL_AUTO = "db.hibernate.hbm2ddl.auto";

    @Resource
    private Environment env;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName(env.getRequiredProperty(PROP_DATABASE_DRIVER));
        dataSource.setUrl(env.getRequiredProperty(PROP_DATABASE_URL));
        dataSource.setUsername(env.getRequiredProperty(PROP_DATABASE_USERNAME));
        dataSource.setPassword(env.getRequiredProperty("db.password"));

        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
        entityManager.setDataSource(dataSource());
        entityManager.setPackagesToScan(env.getRequiredProperty(PROP_ENTITYMANAGER_PACKAGES_TO_SCAN));
        entityManager.setPersistenceProviderClass(HibernatePersistence.class);
        entityManager.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        entityManager.setJpaProperties(getHibernateProperties());
        return entityManager;

    }

    @Bean
    public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory);
        return transactionManager;
    }

    private Properties getHibernateProperties() {
        Properties properties = new Properties();
        properties.put(PROP_HIBERNATE_DIALECT, env.getRequiredProperty(PROP_HIBERNATE_DIALECT));
        properties.put(PROP_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROP_HIBERNATE_SHOW_SQL));
        properties.put(PROP_HIBERNATE_HBM2DDL_AUTO, env.getRequiredProperty(PROP_HIBERNATE_HBM2DDL_AUTO));

        return properties;
    }

}

app.properties:

#DB properties:
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1:3306/mydb
db.username=root
db.password=111111

#Hibernate Configuration:

db.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
db.hibernate.show_sql=true
db.entitymanager.packages.to.scan=ru.sbrf.risks.services.data.model
db.hibernate.hbm2ddl.auto = create-drop

Итак, в логах tomcat есть сообщение об ошибке:

Причина: javax.persistence.PersistenceException: [PersistenceUnit: default] Невозможно построить EntityManagerFactory в org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory (Ejb3Configuration.javag: hh = 0)ejb.Ejb3Configuration.buildEntityManagerFactory (Ejb3Configuration.java:899) при org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory (HibernatePersistence.java:76) при org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory (LocalContainerEntityManagerFactoryBean.java:287) в орг.springframework.orm.jpa.AbstractEntityManagerFactoryBean.ry.java:1612) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1549) ... еще 57 причин: org.hibernate.Hiberge'не установлено в org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.determineDialect (DialectFactoryImpl.java:97) в org.hibernate.service.jdbc.dialect.internal.DialectFactoryImpl.buildDialect: DialFact.iavorg.hibernate.engine.jdbc.internal.initializeService (AbstractServiceRegistryImpl.java:159) в org.hibernate.service.internal.AbstractServiceRegistryImpl.getService (AbstractServiceRegistryImpl.java:131) в org.hibernate.cfg.Configuration.buildTypeRegistrationsva: 1818) в org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1776) в org.hibernate.ejb.EntityManagerFactoryImpl. (EntityManagerFactoryImpl.java:96) в org.hibernate.ejb_jbFj.jpgjava: 914) ... еще 63

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018
@PropertySource("classpath:app.properties") 

Это значение аннотации замените на значение, передаваемое ниже

@PropertySource(value = {"classpath:application.properties","file:config/application.properties"}, ignoreResourceNotFound = true)

, и восстановите ваш проект. Теперь все работает нормально.

0 голосов
/ 26 сентября 2018

Hibernate не понимает свойства, которые вы передаете.hibernate.dialect определено как db.hibernate.dialect Удалите часть db и просто укажите ее как hibernate.dialect и сделайте то же самое с другими свойствами, связанными с гибернацией.

https://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/session-configuration.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...