Saya mencoba menjalankan aplikasi spring-boot yang menggunakan hibernate via spring-jpa, tetapi saya mendapatkan kesalahan ini:
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
File pom.xml saya adalah ini:
<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>
konfigurasi hibernate saya adalah (konfigurasi dialek dalam metode terakhir dari kelas ini):
@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");
}
};
}
}
apa yang saya lakukan salah di sini?
application.propertes
? Saya lebih suka cara di mana saya melakukan semua konfigurasi di kelas HibernateConfig.Saya menghadapi masalah yang sama ketika memulai aplikasi (menggunakan Spring Boot) dengan server database turun .
Hibernate dapat menentukan dialek yang benar untuk digunakan secara otomatis, tetapi untuk melakukan ini, perlu koneksi langsung ke database.
sumber
tambahkan
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
file application.propertiessumber
Saya mendapatkan kesalahan ini ketika database saya tidak dibuat. Setelah membuat DB secara manual, itu berfungsi dengan baik.
sumber
Saya juga menghadapi masalah serupa. Tapi, itu karena kata sandi yang diberikan tidak valid. Juga, saya ingin mengatakan kode Anda sepertinya kode gaya lama menggunakan pegas. Anda telah menyebutkan bahwa Anda menggunakan spring boot, yang berarti sebagian besar hal akan dikonfigurasi secara otomatis untuk Anda. dialek hibernate akan dipilih secara otomatis berdasarkan driver DB yang tersedia di classpath bersama dengan kredensial yang valid yang dapat digunakan untuk menguji koneksi dengan benar. Jika ada masalah dengan koneksi Anda akan kembali menghadapi kesalahan yang sama. hanya 3 properti yang diperlukan di application.properties
sumber
Saya mengalami masalah yang sama dan masalah saya adalah bahwa DB yang saya coba hubungkan tidak ada.
Saya membuat DB, memverifikasi URL / koneksi string dan reran dan semuanya berfungsi seperti yang diharapkan.
sumber
ini terjadi karena kode Anda tidak bale untuk menghubungkan database. Pastikan Anda memiliki driver mysql dan nama pengguna, kata sandi yang benar.
sumber
Pastikan Anda
application.properties
memiliki semua info yang benar: (Saya mengubah port db dari saya8889
agar3306
berfungsi)sumber
Di spring boot untuk jpa java config, Anda perlu memperluas JpaBaseConfiguration dan mengimplementasikan metode abstraknya.
sumber
Hapus Konfigurasi Hibernate yang berlebihan
Jika Anda menggunakan Spring Boot, Anda tidak perlu memberikan konfigurasi JPA dan Hibernate secara eksplisit, karena Spring Boot dapat melakukannya untuk Anda.
Tambahkan properti konfigurasi basis data
Di
application.properties
file konfigurasi Spring Boot, Anda harus menambahkan properti konfigurasi database Anda:Tambahkan Hibernate properti spesifik
Dan, dalam
application.properties
file konfigurasi yang sama , Anda juga dapat mengatur properti Hibernate kustom:Itu dia!
sumber
Saya memiliki masalah yang sama. menambahkan ini ke application.properties memecahkan masalah:
sumber
Dalam kasus saya, pengguna tidak dapat terhubung ke database. Jika akan memiliki masalah yang sama jika log berisi peringatan sebelum pengecualian:
sumber
Pastikan Anda memiliki database di pom Anda seperti OP lakukan. Itu masalah saya.
sumber
Masalah saya adalah bahwa database tertanam sudah terhubung. koneksi dekat
sumber
Saya mendapatkan masalah ini ketika Eclipse tidak dapat menemukan driver JDBC. Harus melakukan refresh gradle dari gerhana untuk mendapatkan pekerjaan ini.
sumber
Berikut ini adalah beberapa alasan untuk masalah yang
hibernate.dialect
tidak diatur. Sebagian besar pengecualian ini ditampilkan di log startup yang akhirnya diikuti oleh masalah yang disebutkan.Contoh: Di aplikasi Booting musim semi dengan Postgres DB
1. Periksa apakah database benar-benar diinstal dan servernya dimulai.
2. Periksa apakah nama database disebutkan dengan benar.
org.postgresql.util.PSQLEeksepsi: FATAL: database "foo" tidak ada
Dalam
application.properties
file,tetapi
foo
tidak ada. Jadi saya membuat database dari pgAdmin untuk postgres3. Periksa apakah nama host dan port server dapat diakses.
4. Periksa apakah kredensial database sudah benar.
org.postgresql.util.PSQLException: FATAL: otentikasi kata sandi gagal untuk "postgres" pengguna
spring.datasource.username= {DB USERNAME HERE}
spring.datasource.password= {DB PASSWORD HERE}
sumber
Jika Anda menggunakan baris ini:
pastikan itu
env.getProperty("hibernate.dialect")
bukan nol.sumber
Diselesaikan dengan properti di my
META-INF/persistence.xml
sumber
Bagi mereka yang bekerja dengan AWS MySQL RDS, ini dapat terjadi ketika Anda tidak dapat terhubung ke database. Pergi ke pengaturan Grup Keamanan AWS untuk MySQL RDS dan edit aturan IP masuk dengan menyegarkan MyIP.
Saya menghadapi masalah ini dan melakukan di atas menyelesaikan masalah untuk saya.
sumber
Saya juga punya masalah ini. Dalam kasus saya itu karena tidak ada hibah yang diberikan kepada pengguna MySQL. Menetapkan hibah kepada pengguna MySQL yang digunakan aplikasi saya menyelesaikan masalah:
sumber
Saya memiliki masalah yang sama dan setelah debugging ternyata Spring application.properties memiliki alamat IP yang salah untuk server DB
sumber
Saya mereproduksi pesan kesalahan ini dalam tiga kasus berikut:
Solusi yang jelas adalah membuat pengguna basis data baru dengan nama pengguna dan kata sandi yang sama seperti pada aplikasi pegas-boot atau mengubah nama pengguna dan kata sandi dalam file aplikasi pegas-boot Anda untuk mencocokkan pengguna database yang ada dan memberikan hak yang cukup kepada pengguna database tersebut. Dalam hal database MySQL ini dapat dilakukan seperti yang ditunjukkan di bawah ini:
Jelas ada perintah serupa di Postgresql tapi saya belum menguji jika dalam kasus Postgresql pesan kesalahan ini dapat direproduksi dalam tiga kasus ini.
sumber
Saya memiliki masalah yang sama dan itu disebabkan karena tidak dapat terhubung ke instance database. Cari kesalahan hibernasi HHH000342 di log di atas kesalahan itu, itu akan memberi Anda gambaran di mana koneksi db gagal (salah nama pengguna / pass, url, dll.)
sumber
Ini terjadi pada saya karena saya belum menambahkan
conf.configure();
sebelum memulai sesi:sumber
Pastikan Anda telah memasukkan detail yang valid di application.properties dan apakah server database Anda tersedia. Sebagai contoh ketika Anda terhubung dengan MySQL, periksa apakah XAMPP berjalan dengan benar.
sumber
Saya menghadapi masalah yang sama: db yang saya coba hubungkan tidak ada. Saya menggunakan
jpa.database=default
(yang saya kira artinya akan mencoba untuk terhubung ke database dan kemudian pilih dialek secara otomatis). Setelah saya memulai database, itu bekerja dengan baik tanpa perubahan apa pun.sumber
Saya menghadapi masalah ini karena versi Mysql 8.0.11 kembali ke 5.7 diselesaikan untuk saya
sumber
Saya memiliki kesalahan yang sama setelah menggunakan pembuatan kode hibernate
https://www.mkyong.com/hibernate/how-to-generate-code-with-hibernate-tools/
kemudian
hibernate.cfg.xml
dibuat/src/main/java
tetapi tanpa parameter koneksi setelah menghapusnya - masalah saya terpecahkansumber
Jika kesalahan sebelumnya dalam log adalah ini: "ERROR - HikariPool-1 - jdbcUrl diperlukan dengan driverClassName" maka solusinya adalah menulis ulang "url" menjadi "jdbc-url" sesuai dengan ini: Database application.yml untuk boot Spring dari aplikasi .properti
sumber
Saya memiliki Kesalahan yang sama,
dalam kasus saya PERANG memiliki application.properties di dalam yang menunjuk ke server pengembangan di
mana application.properties eksternal menunjuk ke server DB yang tepat.
pastikan Anda tidak memiliki aplikasi lain. Properti di classpath / guci ...
sumber