JDBC 类型无方言映射:1111

2022-08-31 21:19:36

我正在开发一个Spring JPA应用程序,使用MySQL作为数据库。我确保加载了所有spring-jpa库,hibernate和mysql-connector-java。

我正在运行一个 mysql 5 实例。以下是我的 application.properties 文件的摘录:

spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

spring.datasource.url=jdbc:mysql://localhost/mydatabase
spring.datasource.username=myuser
spring.datasource.password=SUPERSECRET
spring.datasource.driverClassName=com.mysql.jdbc.Driver

执行集成测试时,spring 会正常启动,但在创建休眠 SessionFactory 时失败,但异常如下:

org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111

我认为我的方言应该是Mysql5Dialect,我还尝试了明确说明InnoDB的方言选项,以及两个不表示版本5的方言选项。但是我总是得到相同的“JDBC类型没有方言映射:1111”消息。我的 application.properties 文件驻留在测试/资源源文件夹中。它被JUnit测试运行程序识别(我以前因为其中的拼写错误而得到了一个例外)。

我设置的属性是否错误?我找不到有关这些属性名称的一些官方文档,但在此堆栈溢出答案中发现了一个提示:https://stackoverflow.com/a/25941616/1735497

期待您的回答,谢谢!

顺便说一句,应用程序已经在使用弹簧启动。


答案 1

我收到相同的错误,因为我的查询返回了 UUID 列。为了解决这个问题,我通过“cast(columnName as varchar)”等查询将UUID列作为varchar类型返回,然后它起作用了。

例:

public interface StudRepository extends JpaRepository<Mark, UUID> {

    @Modifying
    @Query(value = "SELECT Cast(stuid as varchar) id, SUM(marks) as marks FROM studs where group by stuid", nativeQuery = true)
    List<Student> findMarkGroupByStuid();

    public static interface Student(){
        private String getId();
        private String getMarks();
    }
}

答案 2

以下是基于SubOptimal的评论的答案:

错误消息实际上说一列类型不能通过休眠映射到数据库类型。在我的情况下,它是我在某些实体中用作主键的类型。只需应用注释(对于 postgresjava.util.UUID@Type(type="uuid-char")@Type(type="pg-uuid"))


推荐