JDBC 类型没有方言映射:1111

新手上路,请多包涵

我正在开发一个 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 正常启动但无法创建 hibernate SessionFactory,但以下情况除外:

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

我认为我的方言应该是 Mysql5Dialect,我还尝试了一个明确说明 InnoDB 的方言,以及两个不指示版本 5 的方言选项。但我总是以相同的“No Dialect mapping for JDBC type: 1111”消息结束.我的 application.properties 文件位于 test/resources 源文件夹中。它被 JUnit 测试运行器识别(我之前因为其中的拼写错误而遇到异常)。

我设置的属性有误吗?我找不到关于这些属性名称的一些官方文档,但在这个 stackoverflow 答案中找到了提示: https ://stackoverflow.com/a/25941616/1735497

期待您的解答,谢谢!

顺便说一句,该应用程序已经在使用 spring boot。

原文由 SakeSushiBig 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

这是基于 SubOptimal 评论的答案:

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

原文由 SakeSushiBig 发布,翻译遵循 CC BY-SA 3.0 许可协议

我得到了同样的错误,因为我的查询返回了一个 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();
    }
}

原文由 Ramya 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题