org.hibernate.HibernateException: การเข้าถึง DialectResolutionInfo ไม่สามารถเป็นค่าว่างเมื่อไม่ได้ตั้งค่า 'hibernate.dialect'


205

ฉันพยายามเรียกใช้แอปพลิเคชัน spring-boot ซึ่งใช้ Hibernate ผ่าน spring-jpa แต่ฉันได้รับข้อผิดพลาดนี้:

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

ไฟล์ pom.xml ของฉันคือสิ่งนี้:

<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>

การตั้งค่า hibernate ของฉันคือ (การตั้งค่าภาษาในวิธีสุดท้ายจากคลาสนี้):

@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");
         }
      };
   }
}

ฉันทำอะไรผิดที่นี่

คำตอบ:


199

ก่อนอื่นให้ลบการกำหนดค่าทั้งหมดของคุณ Spring Boot จะเริ่มต้นให้คุณ

ตรวจสอบให้แน่ใจว่าคุณมีapplication.propertiesclasspath ของคุณและเพิ่มคุณสมบัติต่อไปนี้

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

หากคุณต้องการเข้าถึง a SessionFactoryและนั่นเป็นแหล่งข้อมูลเดียวกันโดยทั่วไปคุณสามารถทำสิ่งต่อไปนี้ (ซึ่งมีการบันทึกไว้ที่นี่แม้ว่าสำหรับ XML ไม่ใช่ JavaConfig)

@Configuration        
public class HibernateConfig {

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

วิธีการที่คุณมีทั้งและEntityManagerFactorySessionFactory

UPDATE:ณ Hibernate 5 จริงขยายSessionFactory EntityManagerFactoryดังนั้นเพื่อให้ได้SessionFactoryคุณสามารถเพียงแค่โยนEntityManagerFactoryมันหรือใช้unwrapวิธีการที่จะได้รับ

public class SomeHibernateRepository {

  @PersistenceUnit
  private EntityManagerFactory emf;

  protected SessionFactory getSessionFactory() {
    return emf.unwrap(SessionFactory.class);
  }

}

สมมติว่าคุณมีคลาสที่มีmainเมธอดโดยที่@EnableAutoConfigurationคุณไม่จำเป็นต้องใช้@EnableTransactionManagementคำอธิบายประกอบเนื่องจากสปริงบูทจะเปิดใช้งานสำหรับคุณ คลาสแอ็พพลิเคชันพื้นฐานในcom.spring.appแพ็กเกจควรเพียงพอ

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {


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

} 

สิ่งที่ควรจะเพียงพอที่จะตรวจพบคลาสของคุณทั้งหมด (รวมถึงเอนทิตีและที่เก็บตาม Spring Data)

UPDATE:คำอธิบายประกอบเหล่านี้สามารถถูกแทนที่ด้วยหนึ่งเดียว@SpringBootApplicationใน Spring Boot รุ่นล่าสุด

@SpringBootApplication
public class Application {

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

ฉันยังอยากจะแนะนำให้ถอดcommons-dbcpพึ่งพาเป็นที่จะช่วยให้ฤดูใบไม้ผลิ Boot ในการกำหนดค่าได้เร็วขึ้นและมีประสิทธิภาพมากขึ้นHikariCPการดำเนินงาน


1
แต่มีวิธีหลีกเลี่ยงการสร้างไฟล์นี้application.propertesหรือไม่? ฉันชอบวิธีที่ฉันทำการกำหนดค่าทั้งหมดในชั้นเรียน HibernateConfig
Kleber Mota

2
ทำไม? วัตถุประสงค์ทั้งหมดของ Spring Boot คือการตั้งค่าอัตโนมัติสำหรับคุณ ... ดังนั้นคุณต้องการรวมการกำหนดค่า verbose java มากกว่า 7 บรรทัดในไฟล์คุณสมบัติ!
M. Deinum

2
มันอาจเป็น 6 บรรทัดในไฟล์คุณสมบัติ คุณไม่จำเป็นต้องตั้งค่า spring.datasource.driverClassName เมื่อคุณใช้ Postgres เนื่องจาก Boot จะอนุมานจาก spring.datasource.url
Andy Wilkinson

2
@AlexWorden ไม่ไม่ ... แทนที่จะใส่ความคิดเห็นแบบสุ่มคุณอาจต้องการอ่านวิธีโหลดคุณสมบัติโดยเฉพาะอย่างยิ่งการรองรับ Spring Boot รหัสผ่านบนดิสก์ไม่จำเป็นต้องมีปัญหาหากคุณตั้งค่าสิทธิ์การใช้งานไฟล์โดยตรง การวางไว้ในฐานข้อมูลนั้นไม่ดีกว่า ...
M. Deinum

4
แทนที่จะใช้คำอธิบายประกอบ 3 รายการเช่นการกำหนดค่า EnableAutoConfiguration, ComponentScan เราสามารถใช้คำอธิบายประกอบ SpringBootApplication
Pankaj

158

ฉันกำลังเผชิญปัญหาที่คล้ายกันเมื่อเริ่มต้นขึ้นโปรแกรมประยุกต์ (ใช้ Spring Boot) กับลงเซิร์ฟเวอร์ฐานข้อมูล

Hibernate สามารถกำหนดภาษาถิ่นที่ถูกต้องให้ใช้โดยอัตโนมัติ แต่ในการดำเนินการนี้จำเป็นต้องมีการเชื่อมต่อกับฐานข้อมูล


2
ปัญหาของฉันคล้ายกับสิ่งนี้ใน pg_hba.conf บนเซิร์ฟเวอร์ที่ไม่ได้กำหนดค่าสำหรับการเชื่อมต่อระยะไกลซึ่งทำให้ฉันมีข้อผิดพลาดนี้
Brian

8
หากฐานข้อมูลที่คุณพยายามเชื่อมต่อไม่มีอยู่คุณจะเห็นข้อผิดพลาดนี้ด้วย
Jonas Pedersen

12
มีปัญหาเดียวกันในกรณีของฉันฐานข้อมูลขึ้น แต่ข้อมูลประจำตัวผิด +1
Federico Piazza

น่าแปลกใจที่ฉันเริ่มได้รับปัญหานี้เมื่อสคีมาที่ลดลงคาดว่า hbm2ddl.auto = true จะสร้าง db และตาราง อย่างไรก็ตามมันล้มเหลว แต่เมื่อฉันสร้าง schema ที่ว่างเปล่า hbm2ddl ทำงานสร้างตาราง
Saurabh

IP ของเครื่องฐานข้อมูลมีการเปลี่ยนแปลง แต่ DNS ได้แก้ไขเป็นตัวเก่า :-(
Illidan

24

เพิ่มspring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialectในไฟล์ application.properties


นี่เป็นคำตอบที่ยอดเยี่ยม - อนุญาตให้ฉันใช้ MockBean สำหรับคลาสฐานข้อมูลของฉันและไม่มีข้อมูลการเชื่อมต่อที่แท้จริงในโปรไฟล์คุณสมบัติของฉัน
Taylor

การเพิ่ม spring.jpa.properties.hibernate.dialect ไปยัง application.properties ช่วยฉันได้ ขอบคุณ)
Maks

22

ฉันได้รับข้อผิดพลาดนี้เมื่อไม่ได้สร้างฐานข้อมูล หลังจากสร้างฐานข้อมูลด้วยตนเองมันก็ใช้ได้ดี


1
โดยปกติคุณสามารถหลีกเลี่ยงการสร้างด้วยตนเองโดยใช้ "spring.jpa.hibernate.ddl-auto = create"
อังเดร

@Andrei - วิธี / ฉันจะระบุ "spring.jpa.hibernate.ddl-auto = create" ได้อย่างไร?
Alex Worden

2
@AlexWorden, Andrei หมายความว่าคุณสามารถใส่ไว้ใน application.properties ถ้าเป็น Spring Boot จะต้องเทียบเท่ากับการกำหนดค่าสปริงตาม xml
ACV

ข้อผิดพลาดนี้จะปรากฏเฉพาะเมื่อไม่มีฐานข้อมูลหรือเมื่อไม่มีตารางในฐานข้อมูลอยู่ด้วยหรือไม่
zygimantus

1
ฉันได้รับรหัสผ่านผิดและฉันพบข้อผิดพลาดเดียวกัน ขอบคุณ ACV คุณช่วยฉันมาก
santu

17

ฉันยังต้องเผชิญกับปัญหาที่คล้ายกัน แต่เป็นเพราะรหัสผ่านไม่ถูกต้องที่ให้ไว้ นอกจากนี้ฉันอยากจะบอกว่ารหัสของคุณดูเหมือนจะเป็นรหัสแบบเก่าโดยใช้สปริง คุณได้พูดไปแล้วว่าคุณกำลังใช้การบูทสปริงซึ่งหมายความว่าสิ่งส่วนใหญ่จะได้รับการกำหนดค่าอัตโนมัติสำหรับคุณ ภาษาไฮเบอร์เนตจะถูกเลือกโดยอัตโนมัติตามไดรเวอร์ DB ที่มีอยู่ใน classpath พร้อมกับข้อมูลรับรองที่ถูกต้องซึ่งสามารถใช้ในการทดสอบการเชื่อมต่อได้อย่างถูกต้อง หากมีปัญหาใด ๆ กับการเชื่อมต่อคุณจะพบข้อผิดพลาดเดียวกันอีกครั้ง คุณสมบัติที่ต้องการเพียง 3 อย่างใน application.properties

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

# Replace with your credentials
spring.datasource.username=root
spring.datasource.password=

8

ฉันพบปัญหาเดียวกันและปัญหาของฉันคือฐานข้อมูลที่ฉันพยายามเชื่อมต่อไม่มีอยู่

ฉันสร้าง DB ตรวจสอบ URL / สตริงการเชื่อมต่อและรันใหม่และทุกอย่างทำงานตามที่คาดไว้


ขอบคุณที่แสดงความคิดเห็นทำให้ฉันไปตรวจสอบพอร์ตการเชื่อมต่อซึ่งผิด
Feras

4

สิ่งนี้เกิดขึ้นเพราะรหัสของคุณไม่มัดในการเชื่อมต่อฐานข้อมูล ตรวจสอบให้แน่ใจว่าคุณมีไดรเวอร์ mysql และชื่อผู้ใช้รหัสผ่านที่ถูกต้อง


4

ให้แน่ใจว่าคุณapplication.propertiesได้ข้อมูลทั้งหมดที่ถูกต้อง: (ผมเปลี่ยนพอร์ตฐานข้อมูลของฉันจาก8889การ3306ทำงาน)

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

4

ใน Spring boot สำหรับ jpa java config คุณต้องขยาย JpaBaseConfiguration และใช้เมธอด abstract

@Configuration
public class JpaConfig extends JpaBaseConfiguration {

    @Override
    protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        return vendorAdapter;
    }

    @Override
    protected Map<String, Object> getVendorProperties() {
        Map<String, Object> properties = new HashMap<>();
        properties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
    }

}

บางกรณีแอปพลิเคชันคุณสมบัติไม่สามารถมองเห็นการเปลี่ยนแปลงคุณสมบัติและฉันเพิ่ม properties.put เช่นด้านบนและทำงานได้ดีขอบคุณสำหรับการตอบกลับ
fatih yavuz

4

ลบการกำหนดค่าไฮเบอร์เนตซ้ำซ้อน

หากคุณใช้ Spring Boot คุณไม่จำเป็นต้องระบุ JPA และ Hibernate configuration อย่างชัดเจนเนื่องจาก Spring Boot สามารถทำได้สำหรับคุณ

เพิ่มคุณสมบัติการกำหนดค่าฐานข้อมูล

ในapplication.propertiesไฟล์คอนฟิกูเรชัน Spring Boot คุณมีคุณสมบัติการกำหนดค่าฐานข้อมูลเพิ่ม:

spring.datasource.driverClassName = "org.postgresql.Driver
spring.datasource.url = jdbc:postgresql://localhost:5432/teste?charSet=LATIN1
spring.datasource.username = klebermo
spring.datasource.password = 123

เพิ่มคุณสมบัติเฉพาะของไฮเบอร์เนต

และในapplication.propertiesไฟล์กำหนดค่าเดียวกันคุณยังสามารถตั้งค่าคุณสมบัติไฮเบอร์เนตแบบกำหนดเองได้:

# Log SQL statements
spring.jpa.show-sql = false

# Hibernate ddl auto for generating the database schema
spring.jpa.hibernate.ddl-auto = create

# Hibernate database Dialect
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

แค่นั้นแหละ!


การเพิ่ม spring.jpa.properties.hibernate.dialect ไปยัง application.properties ช่วยฉันได้ ขอบคุณ)
Maks

3

ฉันมีปัญหาเดียวกัน การเพิ่มสิ่งนี้ไปยัง application.properties แก้ไขปัญหา:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

การเพิ่ม spring.jpa.properties.hibernate.dialect ไปยัง application.properties ช่วยฉันได้ ขอบคุณ)
Maks

2

ในกรณีของฉันผู้ใช้ไม่สามารถเชื่อมต่อกับฐานข้อมูล หากจะมีปัญหาเดียวกันหากบันทึกมีคำเตือนก่อนข้อยกเว้น:

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

2

ตรวจสอบให้แน่ใจว่าคุณมีฐานข้อมูลใน pom เหมือน OP นั่นคือปัญหาของฉัน


คุณสามารถอธิบายรายละเอียดเพิ่มเติมได้หรือไม่ คุณหมายถึงอะไรกับคำตอบนี้
Tunaki

ฉันแค่ต้องการเพิ่มการพึ่งพา mysql
obesechicken13

2

ปัญหาของฉันคือฐานข้อมูลแบบฝังตัวเชื่อมต่ออยู่แล้ว ปิดการเชื่อมต่อ


1
ฉันสามารถยืนยันได้ว่ามีปัญหาไฮเบอร์เนตบางประเภทที่รายงานข้อผิดพลาดนี้เมื่อไม่สามารถเชื่อมต่อได้ ฉันสามารถทำซ้ำปัญหาการเปิดและปิดเครือข่าย
borjab

2

ฉันได้รับปัญหานี้เมื่อ Eclipse ไม่พบไดรเวอร์ JDBC ต้องรีเฟรช gradles จาก eclipse เพื่อให้ได้งานนี้


2

ต่อไปนี้คือสาเหตุบางประการสำหรับhibernate.dialectปัญหาที่ไม่ได้ตั้งค่า ข้อยกเว้นเหล่านี้ส่วนใหญ่จะแสดงในบันทึกการเริ่มต้นซึ่งตามมาด้วยปัญหาที่กล่าวถึงในที่สุด

ตัวอย่าง: ใน Spring boot app ที่มี Postgres DB

1. ตรวจสอบว่าติดตั้งฐานข้อมูลจริงและเซิร์ฟเวอร์เริ่มทำงานหรือไม่

  • org.postgresql.util.PSQLException: การเชื่อมต่อกับ localhost: 5432 ถูกปฏิเสธ ตรวจสอบว่าชื่อโฮสต์และพอร์ตถูกต้องและ postmaster ยอมรับการเชื่อมต่อ TCP / IP
  • java.net.ConnectException: การเชื่อมต่อถูกปฏิเสธ: เชื่อมต่อ
  • org.hibernate.service.spi.ServiceException: ไม่สามารถสร้างบริการที่ร้องขอ [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

2. ตรวจสอบว่ามีการกล่าวถึงชื่อฐานข้อมูลอย่างถูกต้องหรือไม่

  • org.postgresql.util.PSQLException: FATAL: ฐานข้อมูล "foo" ไม่มีอยู่

    ในapplication.propertiesไฟล์

    spring.datasource.url = jdbc:postgresql://localhost:5432/foo

    แต่fooไม่มีอยู่จริง ดังนั้นฉันจึงสร้างฐานข้อมูลจาก pgAdmin สำหรับ postgres

    CREATE DATABASE foo;

3. ตรวจสอบว่าชื่อโฮสต์และเซิร์ฟเวอร์พอร์ตสามารถเข้าถึงได้

  • org.postgresql.util.PSQLException: การเชื่อมต่อกับ localhost: 5431 ถูกปฏิเสธ ตรวจสอบว่าชื่อโฮสต์และพอร์ตถูกต้องและ postmaster ยอมรับการเชื่อมต่อ TCP / IP
  • java.net.ConnectException: การเชื่อมต่อถูกปฏิเสธ: เชื่อมต่อ

4. ตรวจสอบว่าข้อมูลรับรองฐานข้อมูลถูกต้องหรือไม่

  • ดังที่ @Pankaj กล่าวถึง
  • org.postgresql.util.PSQLException: FATAL: การตรวจสอบรหัสผ่านล้มเหลวสำหรับผู้ใช้ "postgres"

    spring.datasource.username= {DB USERNAME HERE}

    spring.datasource.password= {DB PASSWORD HERE}


1

หากคุณใช้สายนี้:

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

ตรวจสอบให้แน่ใจว่าenv.getProperty("hibernate.dialect")ไม่เป็นโมฆะ


1

เดียวกัน แต่ในJBoss WildFly AS

แก้ไขด้วยคุณสมบัติในตัวของฉัน 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>

1

สำหรับผู้ที่ทำงานกับ AWS MySQL RDS อาจเกิดขึ้นเมื่อคุณไม่สามารถเชื่อมต่อกับฐานข้อมูล ไปที่การตั้งค่า AWS Security Groups สำหรับ MySQL RDS และแก้ไขกฎ IP ขาเข้าโดยรีเฟรช MyIP

ฉันประสบปัญหานี้และการดำเนินการด้านบนได้รับการแก้ไขปัญหาสำหรับฉัน


ฉันอนุญาตการรับส่งข้อมูลทั้งหมดไปยังกลุ่มความปลอดภัยของ RDS Aurora MySQL นี่เป็นเคล็ดลับสำหรับฉัน ถ้าคุณต้องการที่จะเฉพาะเจาะจงมากขึ้นหรือสำหรับ prod env เพิ่มเฉพาะ ips ที่ได้รับอนุญาต
AleksandarT

1

ฉันยังมีปัญหานี้ ในกรณีของฉันมันเป็นเพราะไม่มีการมอบสิทธิ์ให้กับผู้ใช้ MySQL การมอบสิทธิ์ให้แก่ผู้ใช้ MySQL ซึ่งแอพของฉันใช้แก้ไขปัญหาได้:

grant select, insert, delete, update on my_db.* to 'my_user'@'%';

1

ฉันมีปัญหาเดียวกันและหลังจากการดีบักปรากฎว่า Spring application.properties มีที่อยู่ IP ที่ไม่ถูกต้องสำหรับเซิร์ฟเวอร์ DB

spring.datasource.url=jdbc:oracle:thin:@WRONG:1521/DEV

1

ฉันทำซ้ำข้อผิดพลาดนี้ในสามกรณีต่อไปนี้:

  • ไม่มีผู้ใช้ฐานข้อมูลที่มีชื่อผู้ใช้ที่เขียนในไฟล์ application.properties หรือไฟล์ persistence.properties หรือในกรณีของคุณในไฟล์ HibernateConfig
  • ฐานข้อมูลที่ปรับใช้มีผู้ใช้นั้น แต่ผู้ใช้จะถูกระบุด้วยรหัสผ่านที่แตกต่างจากที่ระบุไว้ในไฟล์ใดไฟล์หนึ่งจากด้านบน
  • ฐานข้อมูลมีผู้ใช้และรหัสผ่านตรงกัน แต่ผู้ใช้นั้นไม่มีสิทธิ์ทั้งหมดที่จำเป็นในการทำงานฐานข้อมูลทั้งหมดที่แอพ spring-boot ของคุณทำ

ทางออกที่ชัดเจนคือการสร้างผู้ใช้ฐานข้อมูลใหม่ด้วยชื่อผู้ใช้และรหัสผ่านเช่นเดียวกับในแอพ spring-boot หรือเปลี่ยนชื่อผู้ใช้และรหัสผ่านในไฟล์แอพ spring-boot ของคุณเพื่อให้ตรงกับผู้ใช้ฐานข้อมูลที่มีอยู่ ในกรณีของฐานข้อมูล MySQL สามารถทำได้ดังนี้:

mysql -u root -p 
>CREATE USER 'theuser'@'localhost' IDENTIFIED BY 'thepassword';
>GRANT ALL ON *.* to theuser@localhost IDENTIFIED BY 'thepassword';
>FLUSH PRIVILEGES;

เห็นได้ชัดว่ามีคำสั่งที่คล้ายกันใน Postgresql แต่ฉันไม่ได้ทดสอบว่าในกรณีของ Postgresql ข้อความแสดงข้อผิดพลาดนี้สามารถทำซ้ำได้ในสามกรณีนี้


0

ฉันมีปัญหาเดียวกันและเกิดจากการไม่สามารถเชื่อมต่อกับอินสแตนซ์ฐานข้อมูล มองหาข้อผิดพลาดการจำศีล HHH000342 ในบันทึกข้อผิดพลาดข้างต้นมันควรให้คุณทราบว่าการเชื่อมต่อฐานข้อมูลล้มเหลว (ชื่อผู้ใช้ / รหัสผ่านไม่ถูกต้อง, URL, ฯลฯ )


0

สิ่งนี้เกิดขึ้นกับฉันเพราะฉันไม่ได้เพิ่มconf.configure();ก่อนเริ่มเซสชัน:

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

0

ตรวจสอบให้แน่ใจว่าคุณป้อนรายละเอียดที่ถูกต้องในapplication.propertiesและระบุว่าเซิร์ฟเวอร์ฐานข้อมูลของคุณพร้อมใช้งานหรือไม่ เป็นตัวอย่างเมื่อคุณเชื่อมต่อกับ MySQL ตรวจสอบว่า XAMPPทำงานอย่างถูกต้องหรือไม่


0

ฉันพบปัญหาเดียวกัน: db ที่ฉันพยายามเชื่อมต่อไม่มีอยู่ ฉันใช้jpa.database=default(ซึ่งฉันเดาว่ามันจะพยายามเชื่อมต่อกับฐานข้อมูลจากนั้นเลือกภาษาโดยอัตโนมัติ) เมื่อฉันเริ่มต้นฐานข้อมูลมันก็ใช้ได้ดีโดยไม่มีการเปลี่ยนแปลงใด ๆ


0

ฉันประสบปัญหานี้เนื่องจาก Mysql 8.0.11 รุ่นย้อนกลับไปที่ 5.7 แก้ไขให้ฉัน


0

ฉันมีข้อผิดพลาดเดียวกันหลังจากใช้การสร้างรหัสจำศีล

https://www.mkyong.com/hibernate/how-to-generate-code-with-hibernate-tools/

แล้วhibernate.cfg.xmlสร้างขึ้นใน/src/main/java แต่ไม่มีพารามิเตอร์การเชื่อมต่อหลังจากลบมัน - ปัญหาของฉันได้รับการแก้ไข


0

หากข้อผิดพลาดก่อนหน้านี้ในบันทึกคือ: "ข้อผิดพลาด - HikariPool-1 - jdbcUrl จำเป็นต้องใช้กับ driverClassName" ดังนั้นการแก้ปัญหาคือการเขียน "url" เป็น "jdbc-url" ตามนี้: Database application.yml สำหรับ Spring boot จากแอปพลิเคชัน .คุณสมบัติ


0

ฉันมีข้อผิดพลาดเดียวกัน

 Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

ในกรณีของฉันสงครามมี application.properties ภายในที่ชี้ไปที่เซิร์ฟเวอร์การพัฒนา
ที่แอปพลิเคชันภายนอกคุณสมบัติถูกชี้ไปยังเซิร์ฟเวอร์ฐานข้อมูลที่ถูกต้อง

ตรวจสอบให้แน่ใจว่าคุณไม่มีแอปพลิเคชันอื่น ๆ คุณสมบัติใน classpath / jars ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.