Estoy tratando de ejecutar un resorte de inicio de la aplicación con la que se utiliza a través de hibernate spring-jpa, pero estoy recibiendo este error:

Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:104)
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:71)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:205)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1613)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1550)
... 21 more

mi pom.xml el archivo es este:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.8.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
</dependency>
</dependencies>

mi configuración de hibernate es que (el dialecto de configuración se encuentra en la última método de esta clase):

@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.spring.app" })
public class HibernateConfig {
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(restDataSource());
sessionFactory.setPackagesToScan(new String[] { "com.spring.app.model" });
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource restDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost:5432/teste?charSet=LATIN1");
dataSource.setUsername("klebermo");
dataSource.setPassword("123");
return dataSource;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
Properties hibernateProperties() {
return new Properties() {
/**
* 
*/
private static final long serialVersionUID = 1L;
{
setProperty("hibernate.hbm2ddl.auto", "create");
setProperty("hibernate.show_sql", "false");
setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
}
};
}
}

lo que estoy haciendo mal aquí?

Para el tutorial completo en la integración con hibernate spring boot comprobar esto: la Primavera de Arranque + JPA + Hibernate + Oracle

OriginalEl autor Kleber Mota | 2014-10-24

21 Comentarios

  1. 145

    Eliminar primero todos los de la configuración de la Primavera del Arranque de inicio para usted. Si usted realmente necesita un SessionFactory en lugar de un EntityManagerFactory agregar un HibernateJpaSessionFactoryBean.

    Asegúrese de que tiene una application.properties en su classpath y agregar las siguientes propiedades.

    spring.datasource.driverClassName=org.postgresql.Driver
    spring.datasource.url=jdbc:postgresql://localhost:5432/teste?charSet=LATIN1
    spring.datasource.username=klebermo
    spring.datasource.password=123
    spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
    spring.jpa.show-sql=false
    spring.jpa.hibernate.ddl-auto=create

    Si usted realmente necesita tener acceso a una SessionFactory y que es básicamente el mismo origen de datos, entonces usted puede hacer lo siguiente (que es también docmented aquí aunque para XML, no JavaConfig).

    @Configuration        
    public class HibernateConfig {
    @Bean
    public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {
    HibernateJpaSessionFactoryBean factory = new HibernateJpaSessionFactoryBean();
    factory.setEntityManagerFactory(emf);
    return factory;
    }
    }

    De esa manera usted tiene tanto un EntityManagerFactory y un SessionFactory.

    Asumiendo que usted tiene una clase con un main método con @EnableAutoConfiguration usted no necesita el @EnableTransactionManagement anotación, ya que será activado por Resorte de Arranque para usted. Una aplicación básica de la clase en la com.spring.app paquete debería ser suficiente.

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

    Algo como eso debe ser suficiente para tener todas sus clases (incluyendo las entidades y la Primavera de Datos de repositorios basados detectados.

    También sugiero la eliminación de la commons-dbcp de dependencia, ya que podría permitir la Primavera de Arranque para configurar el más rápido y más robusto HikariCP aplicación.

    pero, ¿hay alguna forma de evitar que crear este archivo application.propertes? Yo prefiero una manera en la que hacer toda la configuración en la clase HibernateConfig.
    Por qué? El propósito entero de la Primavera de Arranque es que no configuración automática para usted… por Lo que prefiere incluir un detallado configuración de java más de 7 líneas en un archivo de propiedades?!
    Incluso podría ser de 6 líneas en un archivo de propiedades. Usted no necesita ajustar la primavera.origen de datos.driverClassName cuando usted está usando Postgres como Arranque se infiera a partir de la primavera.origen de datos.dirección url.
    No no… en Lugar de poner al azar a los comentarios que usted podría querer leer cómo las propiedades se cargan especialmente el apoyo de la Primavera de Arranque. Las contraseñas en el disco no tiene que ser un problema si usted configurar el archivo de derechos recta. Ponerlos en una base de datos no es mucho mejor…
    En lugar de utilizar 3 anotaciones es decir, de la Configuración,EnableAutoConfiguration,ComponentScan. Podemos utilizar SpringBootApplication anotación

    OriginalEl autor M. Deinum

  2. 101

    Me enfrentaba a un problema similar cuando se inicia la aplicación, usando la Primavera de Arranque) con el servidor de base de datos de abajo.

    Hibernate puede determinar la correcta dialecto utilizar automáticamente, pero para hacer esto, se necesita una conexión activa a la base de datos.

    Mi problema era similar a este en el que pg_hba.conf en el servidor no estaba configurado para la conexión remota, lo que me dio este error.
    Si la base de datos que está tratando de conectarse no existe también puede ver este error.
    Tengo el mismo problema, en mi caso la DB, pero las credenciales estaban equivocados. +1
    sorprendentemente empecé a tener este problema cuando cayó esquema esperando hbm2ddl.auto=true, se crear base de datos y tablas. sin embargo fracasó. pero wen he creado vacía esquema hbm2ddl trabajado en la creación de tablas
    Mismo problema aquí. Base de datos, pero credenciales mal. +1

    OriginalEl autor mhnagaoka

  3. 15

    Tengo este error cuando mi base de datos no fue creado. Después de crear la base de datos manualmente, funcionó bien.

    Normalmente, usted puede evitar la creación manual mediante el uso de «la primavera.jpa.hibernate.ddl-auto=crear»
    cómo / dónde podría especificar «de la primavera.jpa.hibernate.ddl-auto=crear»?
    Andrei, significaba que se pueden poner en la aplicación.propiedades si es la Primavera de Arranque. No debe ser el equivalente de xml basado en la Primavera de configuración.
    ¿Este error sólo aparece cuando la base de datos no existen o también cuando las tablas dentro de la base de datos no están presentes?
    Me había dado mal la contraseña y me estaba enfrentando el mismo error. Gracias ACV, que me ha ayudado mucho.

    OriginalEl autor ACV

  4. 12

    Yo también enfrentan problema similar. Pero, era debido a que la contraseña no válida siempre. También, me gustaría decir que su código parece ser el antiguo estilo de código mediante la primavera. Ya se mencionó que está utilizando la primavera de arranque, lo que significa que la mayoría de las cosas que se auto configurado para usted. hibernate dialecto se auto seleccionan basándose en la base de datos de controladores disponibles en la ruta de clases junto con credenciales válidas que puede ser utilizado para probar la conexión correctamente. Que hay algún problema con la conexión de nuevo ante el mismo error. sólo 3 propiedades necesarias en la aplicación.propiedades

    # Replace with your connection string
    spring.datasource.url=jdbc:mysql://localhost:3306/pdb1
    # Replace with your credentials
    spring.datasource.username=root
    spring.datasource.password=

    OriginalEl autor Pankaj Soni

  5. 11

    agregar spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect en la aplicación.archivo de propiedades

    Impresionante ayudar a los hombres.

    OriginalEl autor alpine

  6. 5

    Me encontré con el mismo problema y mi problema fue que la DB que yo estaba tratando de conectarse a no existir.

    He creado la base de datos, lo que verificó la URL/cadena de conexión y reran y todo funcionó como se esperaba.

    Gracias comentario me llevó a comprobar la conexión del puerto que estaba mal

    OriginalEl autor Eric B.

  7. 3

    esto sucede, es porque el código no es bale para conectar la base de datos. Asegúrese de que usted tiene driver de mysql y el nombre de usuario, contraseña correcta.

    OriginalEl autor user7169604

  8. 3

    Asegúrese de que su application.properties tiene toda la información correcta: (he cambiado mi db puerto de 8889 a 3306 funcionó)

     db.url: jdbc:mysql://localhost:3306/test

    OriginalEl autor Vikram S

  9. 2

    En mi caso el usuario no se pudo conectar a la base de datos. Si va a tener el mismo problema si el registro contiene un aviso justo antes de la excepción:

    WARN HHH000342: Could not obtain connection to query metadata : Login failed for user 'my_user'.

    OriginalEl autor zbig

  10. 2

    Asegúrese de tener su base de datos en el pom como OP hizo. Ese fue mi problema.

    Usted puede elaborar más? ¿A qué te refieres con esta respuesta?
    Yo sólo tenía que añadir la base de la dependencia.

    OriginalEl autor obesechicken13

  11. 2

    Mi problema fue que la base de datos incrustada ya estaba conectado. cerrar la conexión

    Puedo confirmar que hay una especie de Hibernación problema que reporta este error cuando no se conecte. He podido reproducir el problema en el encendido y el apagado de la red.

    OriginalEl autor doesnt_matter

  12. 0

    Tuve el mismo problema y que fue causado por no ser capaz de conectarse a la instancia de base de datos. Buscar hibernate error HHH000342 en el registro por encima de ese error, debe darle una idea de a donde la conexión db está fallando (incorrecta de nombre de usuario/contraseña, url, etc.)

    parece como comentario, no respuesta

    OriginalEl autor Farouk

  13. 0

    Si usted está usando esta línea:

    sessionFactory.getHibernateProperties().put("hibernate.dialect", env.getProperty("hibernate.dialect"));

    asegúrese de que env.getProperty("hibernate.dialect") no es null.

    OriginalEl autor zygimantus

  14. 0

    Esto me pasó a mí, porque yo no había añadido el conf.configure(); antes de comenzar la sesión:

    Configuration conf = new Configuration();
    conf.configure();

    OriginalEl autor diana

  15. 0

    Asegúrese de que tiene entrar válida detalle en aplicación.propiedades y si su servidor de base de datos está disponible. Como un ejemplo, cuando usted se conecta con MySQL comprobar si XAMPP se está ejecutando correctamente.

    OriginalEl autor Lahiru Gamage

  16. 0

    Me enfrentamos al mismo problema: La db que yo estaba tratando de conectar no existe. He utilizado jpa.database=default (que supongo que significa que intentará conectarse a la base de datos y, a continuación, seleccione automático en el dialecto). Una vez que empecé la base de datos, funcionó bien, sin ningún cambio.

    OriginalEl autor Avishekh Tewari

  17. 0

    Mismo, pero en una JBoss WildFly COMO.

    Resuelto con propiedades en mi META-INF/persistence.xml

    <properties>
    <property name="hibernate.transaction.jta.platform"
    value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
    <property name="spring.jpa.database-platform" value="org.hibernate.dialect.PostgreSQLDialect" />
    <property name="spring.jpa.show-sql" value="false" />
    </properties>

    OriginalEl autor Alejandro Teixeira Muñoz

  18. 0

    Para aquellos que trabajan con AWS MySQL RDS, puede ocurrir cuando no se puede conectar a la base de datos. Ir a AWS Grupos de Seguridad de la configuración de RDS para MySQL y editar la IP entrantes regla refrescante MyIP.

    He enfrentado a este problema y haciendo más arriba tienes el problema solucionado para mí.

    OriginalEl autor Ajitesh

  19. 0

    Me enfrenté a este problema debido a Mysql 8.0.11 versión revertir a 5.7 resuelto para mí

    OriginalEl autor Gautam Yadav

  20. 0

    Tengo este problema cuando el Eclipse no fue capaz de encontrar el controlador JDBC. Tenía que hacer un gradle actualización de eclipse para conseguir este trabajo.

    OriginalEl autor Kannan Ramamoorthy

Dejar respuesta

Please enter your comment!
Please enter your name here