我正在开发Spring应用程序,使用MySQL作为数据库。我确保加载了所有spring库、hibernate和mysql-连接器-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的方言选项。但是我总是以相同的‘没有JDBC类型的方言映射: 1111’的消息结束。我的application.properties文件驻留在test/resources源文件夹中。它是由JUnit测试运行程序识别的(我以前得到了一个异常,因为其中有一个错误)。
我的财产设置错了吗?我找不到关于这些属性名称的一些正式文档,但是在这个堆栈溢出的答案中找到了一个提示:https://stackoverflow.com/a/25941616/1735497
期待您的回答,谢谢!
顺便说一下,应用程序已经在使用spring引导。
发布于 2015-01-28 13:09:02
这里的答案是基于SubOptimal的评论:
错误消息实际上表明hibernate不能将一个列类型映射到数据库类型。在我的例子中,它是我在一些实体中用作主键的java.util.UUID
类型。只需应用注释@Type(type="uuid-char")
(用于postgres @Type(type="pg-uuid")
)
发布于 2019-01-03 06:16:03
我得到了同样的错误,因为我的查询返回了一个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();
}
}
发布于 2015-05-31 19:59:00
还有另一个常见的用例抛出此异常。调用函数,它返回void
。有关更多信息和解决方案,请访问here。
https://stackoverflow.com/questions/28192547
复制相似问题