org.hibernate.HibernateException: Wrong column type
这个问题一般出现在我们使用定长的字符串作为主键(其它字段也可能)的时候,如数据库中的ID为char(16)。虽然很多资料上都说不推荐这样做,但实际上我们在做很多小case的时候自己为了方便也顾不得那么多,随心所欲地设计。其实我们就用INT的主键,只是对你原有的ID(char(16))增加一个Unique Check或者是像在MySQL中增加一个Unique索引又费得了多少事呢。
如果使用char()做为主键时出现如题错误,其很可能的原因在于你的hibernate.cfg.xml文件中的关于Hibernate映射到数据定义语言(DDL)的配置
- <property name="hbm2ddl.auto">validate</property>
当hbm2ddl设置为validate,每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。validate的具体内部实现我不清楚,但我想正是因为每次验证比较导致了如题问题的出现。数据库里字段类型为char(),而你的对象属性为java.lang.String,出现了错误的列类型。
这样的错误并不是经常出现,原因在于我们配置hibernate.cfg.xml文件的时候一般不配置hbm2ddl这一项,即使用默认值“update”,而且在开发或学习的过程中我们通常会配置为“create”,也就很难遇到这样的错误。到这里解决办法已经很明确了,即更改你的hbm2ddl配置。
下面给出一个使用char()做主键的配置实例(源自:Dashboard(Hibernate入门)):
在mysql中新增一個HibernateTest資料庫,並建立USER表格
- CREATE TABLE USER (
- user_id CHAR(32) NOT NULL PRIMARY KEY,
- name VARCHAR(16) NOT NULL,
- sex CHAR(1),
- age INT
- );
Java类User.java
- package onlyfun.caterpillar;
- public class User {
- private String id;
- private String name;
- private char sex;
- private int age;
- public int getAge() {
- return age;
- }
- public String getId() {
- return id;
- }
- public String getName() {
- return name;
- }
- public char getSex() {
- return sex;
- }
- public void setAge(int i) {
- age = i;
- }
- public void setId(String string) {
- id = string;
- }
- public void setName(String string) {
- name = string;
- }
- public void setSex(char c) {
- sex = c;
- }
- }
User.hbm.xml文件配置
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping
- PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
- <hibernate-mapping>
- <class name="onlyfun.caterpillar.User" table="USER">
- <id name="id" type="string" unsaved-value="null">
- <column name="user_id" sql-type="char(32)" />
- <generator class="uuid.hex"/>
- </id>
- <property name="name" type="string" not-null="true">
- <column name="name" length="16" not-null="true"/>
- </property>
- <property name="sex" type="char"/>
- <property name="age" type="int"/>
- </class>
- </hibernate-mapping>
hibernate.cfg.xml文件配置
- <hibernate-configuration>
- <session-factory>
- <property name="show_sql">true</property>
- <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
- <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
- <property name="connection.url">jdbc:mysql://localhost/HibernateTest</property>
- <property name="connection.username">caterpillar</property>
- <property name="connection.password">123456</property>
- <mapping resource="User.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
上面只是个简单的配置实例,主要在于展示User的char(32)类型的ID如何配置。
刚接触Hibernate,有些简单的问题也会搞得你晕头转向,以此作为自己的学习笔记,欢迎指导!
org.hibernate.HibernateException: Wrong column type的更多相关文章
- org.hibernate.HibernateException: No Session found for current thread
spring.springmvc和hibernate整合 在sessionFactory.getCurrentSession()时,出现以下异常 No Session found for curren ...
- 报错HTTP Status 500 - HHH000142: Javassist Enhancement failed: cn.itcast.entity.Customer; nested exception is org.hibernate.HibernateException: HHH000142: Javassist Enhancement failed: cn.itcast.entity.
报错 type Exception report message HHH000142: Javassist Enhancement failed: cn.itcast.entity.Customer; ...
- spring整合hibernate的时候报异常org.hibernate.HibernateException: createQuery is not valid without active transaction
在整合Spring4+hibernate4时候,当代码执行到dao中CRUD操作时,报了一个异常, org.hibernate.HibernateException: createQuery is n ...
- org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not a ...
- org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:
详细错误堆栈信息: org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" ...
- 问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found解决方法
问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not fo ...
- 使用hibernate时出现 org.hibernate.HibernateException: Unable to get the default Bean Validation factory
hibernate 在使用junit测试报错: org.hibernate.HibernateException: Unable to get the default Bean Validation ...
- Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
docs.jboss.org文档示例代码:(http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/) sta ...
- org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml
org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml at org.hibernate ...
随机推荐
- 【Atcoder】 AGC032赛后总结
比赛前 emmm,今天是场AGC,想起上次我的惨痛经历(B都不会),这次估计要凉,可能A都不会Flag1 比赛中 看场看了波\(A\),咦,这不是很呆的题目吗?倒着扫一遍就好了. 然后切了就开始看B, ...
- 教你通过Node.js漏洞完成渗透测试
本篇文章较为详细的讲述了通过node.js的已知漏洞来完成渗透测试的过程,介绍了node.js存在的漏洞可以在多种工具下的不同利用方式.因为我认为会对论坛部分web安全新手有所帮助,所以整理到论坛中. ...
- 【hyperscan】示例解读 simplegrep
示例位置: <hyperscan source>/examples/simplegrep.c参考:http://01org.github.io/hyperscan/dev-referenc ...
- 玄武短信接口和移动MAS短信接口的API封装
直接上代码,关键点: 133行的敏感词过滤 176行的6位扩展码写入 using System; using System.Collections.Generic; using System.Linq ...
- python 数据库连接及操作
Python DB-API使用流程: 引入API模块. 获取与数据库的连接. 执行SQL语句和存储过程. 关闭数据库连接. def mysql_dbtest(): config = { 'host': ...
- 收藏一篇关于Asp.net Response.Filter的文章
Capturing and Transforming ASP.NET Output with Response.Filter https://weblog.west-wind.com/posts/20 ...
- Ubuntu 16.04 服务器上配置使用 Docker
Docker基础概念 在使用Docker之前,我们先了解下几个Docker的核心概念 Docker Daemon Docker引擎,就是运行在后台的一个守护进程,在我们启动它之后,我们就可以通过Doc ...
- 第六章-Javac符号表
需要参考: (1)Architecture of a Java Compiler (2)关于符号Symbol第一篇 (3)关于符号Symbol第二篇 (4)关于类型Type (5)关于作用域范围Sco ...
- Vue笔记:VS Code 常用快捷键
VS Code 常用快捷键 1.注释: 单行注释:ctrl+/, 注释后再按取消 取消单行注释:alt+shift+A 注释后再按取消 2.移动行 向上移动一行:alt+up 向下移动一行:alt+d ...
- 通过DataTrigger绑定Tag属性值进行判断(.net 3.5的环境)
如下,在UserControl中通过Tag传递不同的值,然后在Style中使用DataTrigger进行判断, <UserControl Style="{DynamicResource ...