6
Initial SessionFactory creation failed.org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
    27 Dec, 2012 6:38:34 PM org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet commission threw exception
    org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
        at org.hibernate.dialect.TypeNames.get(TypeNames.java:79)
        at org.hibernate.dialect.TypeNames.get(TypeNames.java:104)
        at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:347)
        at org.hibernate.mapping.Column.getSqlType(Column.java:208)
        at org.hibernate.mapping.Table.sqlCreateString(Table.java:419)
        at org.hibernate.cfg.Configuration.generateSchemaCreationScript(Configuration.java:930)
        at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:105)
        at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:383)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
        at com.core.commission.HibernateUtil.<clinit>(HibernateUtil.java:15)
        at com.core.commission.service.BaseCommissionService.saveRules(BaseCommissionService.java:48)
        at com.core.commission.service.BaseCommissionService.processSave(BaseCommissionService.java:22)
        at com.core.web.CommissionServlet.processRequest(CommissionServlet.java:51)
        at com.core.web.CommissionServlet.doPost(CommissionServlet.java:34)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)

启动 Web 服务器时出现上述错误。我已经使用 enity 类的枚举映射。就像是...

@Column(name = "commission_type")
        @Type(type = "com.core.commission.model.FNEnumUserType", parameters = @Parameter(name = "type", value = "com.core.commission.dto.CommissionType"))
        private CommissionType commissionType;

有什么问题,我错过了配置中的任何内容吗?谢谢 !!

4

4 回答 4

8

堆栈跟踪告诉您的是,Hibernate 正在初始化自身,特别是正在执行Configuration.generateSchemaCreationScript,它会遍历所有映射表并为它们生成 DDL。作为其中的一部分,它查询现有列并将它们转换为内部 Hibernate 表示。它通过调用ResultSetMetaData::getColumnType然后TypeNames::get使用生成的类型代码调用来做到这一点。问题是getColumnType返回的类型代码为 1111,表示“其他”),而 Hibernate 不知道如何处理它。

基本上,您的一个表中的某处是 Hibernate 无法处理的类型的列。如果你能弄清楚是哪一列,你就可以开始考虑如何处理它。

于 2012-12-27T14:49:26.437 回答
1

尝试在数据库端进行跟踪,在应用程序代码中放置一些断点或添加一些日志条目,以识别生成此错误的查询是什么,即在错误发生之前正在执行的查询。

获得查询后,尝试通过将语句分解为小块来缩小根本原因,并查看方言不支持哪种列/变量。

于 2012-12-27T14:22:19.070 回答
1

在您的查询中,我认为某些数据类型正在检索为未知类型。请将类型转换为您在 Java bean 中使用的适当数据类型。如果您使用 Postgres 作为数据库。在您的 Java 代码中,您可以将其类型转换为例如:select column_name :: desired type as \"desired_name\" 例如:select type_name :: text as \"typeName\"

如果“ :: ”这会产生任何问题,请使用\ \:\ \: 即您包含转义字符

于 2014-03-12T11:43:30.727 回答
0

I managed to solve the error.

1111 is for a Null value and in my case that column is mandatory and at any time there will be one value from an enum type. Hence no need to set 1111, I changed it to ARCHAR sql type.

Finally it works.

于 2012-12-27T15:16:15.050 回答