JDBC类型的无Dialect映射:1111
我正在使用MySQL作为数据库的Spring JPA应用程序。 我确保加载所有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时失败,但有exception:
org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
我认为我的方言应该是Mysql5Dialect,我也试过一个明确说明InnoDB,以及两个方言选项,它们不表示版本5.但是我总是得到相同的’没有Dialect映射的JDBC类型:1111’消息。 我的application.properties文件驻留在test / resources源文件夹中。 它被JUnit Test跑者认可(我以前因为打字错误而得到例外)。
属性我设置错了吗? 我找不到关于这些属性名称的一些官方文档,但在此stackoverflow答案中找到了一个提示: https : //stackoverflow.com/a/25941616/1735497
期待您的回答,谢谢!
BTW该应用程序已使用弹簧启动。
这里的答案基于SubOptimal的评论:
错误消息实际上表示一个列类型无法通过hibernate映射到数据库类型。 在我的例子中,它是我在某些实体中用作主键的java.util.UUID
类型。 只需应用注释@Type(type="uuid-char")
(对于postgres @Type(type="pg-uuid")
)
还有另一个常见的用例抛出此exception。 调用返回void
函数。 有关更多信息和解决方案,请转到此
请检查一些列是否返回很多在查询中有未知类型 。
例如:’1’作为column_name可以具有未知类型
和1作为column_name是Integer是正确的。
这件事对我有用。
有时当你调用sql过程/函数时,可能需要返回一些东西。 您可以尝试返回void: RETURN;
或者字符串(这个对我RETURN 'OK'
): RETURN 'OK'
对于任何人使用旧的hibernate(3.x)版本获得此错误:
不要用大写字母写回报类型。 hibernate类型实现映射使用小写返回类型并且不转换它们:
CREATE OR REPLACE FUNCTION do_something(param varchar) RETURNS integer AS $BODY$ ...
在我的情况下,问题是,我在User类中设置存储过程时忘记添加resultClasses属性。
@NamedStoredProcedureQuery(name = "find_email", procedureName = "find_email", resultClasses = User.class, //<--I forgot that. parameters = { @StoredProcedureParameter(mode = ParameterMode.IN, name = "param_email", type = String.class) }),
遇到同样的问题 – 我正在使用Dropwizard DAOTestRule来创建H2数据库
具有UUID的人员实体
public class Person { @Id @GeneratedValue private long id; @Type(type="org.hibernate.type.PostgresUUIDType") @Generated(GenerationTime.ALWAYS) @Column private UUID uuid; ... ...
插件UUID支持H2
public class H2UuidType extends AbstractSingleColumnStandardBasicType implements DiscriminatorType { private static final long serialVersionUID = -1L; public static final H2UuidType INSTANCE = new H2UuidType(); public H2UuidType() { super(VarcharTypeDescriptor.INSTANCE, UUIDTypeDescriptor.INSTANCE); } @Override public UUID stringToObject(String xml) throws Exception { return fromString( xml ); } @Override public String objectToSQLString(UUID value, Dialect dialect) throws Exception { return toString( value ); } @Override public String getName() { return "org.hibernate.type.PostgresUUIDType"; } }
数据库集成测试/将自定义类型添加到H2Dialect
@Rule public DAOTestRule database = DAOTestRule.newBuilder() .addEntityClass(Person.class) .customizeConfiguration(c -> c.registerTypeContributor( (typeContributions, serviceRegistry) -> { typeContributions.contributeType( H2UuidType.INSTANCE ); } )) .build();
- org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:*靠近第1行
- 覆盖Hibernate注释
- 为什么hibernate执行两个查询以急切加载@OneToOne双向关联?
- @Transient不在hibernate中工作
- Spring 4 + Hibernate 5 = org.springframework.orm.jpa.EntityManagerHolder无法强制转换为org.springframework.orm.hibernate5.SessionHolder
- 如何使用Hibernate获取两个字段的唯一键?
- 通过hibernate的Joda-Money持久性
- 使用多个线程的JPA持久性
- 只有在第二次尝试后,maven安装抛出“打开zip文件时出错”