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 ...
随机推荐
- 几款移动跨平台App开发框架比较
整理目前流行的跨平台WebApp开发技术的特点,仅供参考. 每个框架几乎都包含以下特性: 使用 HTML5 + CSS + JavaScript 开发 跨平台重用代码 丰富的UI库 提供访问设备原生A ...
- Page_Load是怎样被执行的
关于Asp.Net的生命周期的文章,很多很多,不管是管道生命周期,还是页面生命周期,图文并茂的文章并不少,我就不说了,我只是在复习这些知识点的时候,想具体知道一个页面的Page_Load方法到底是怎么 ...
- D17——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D17 20181014内容纲要: 1.jQuery介绍 2.jQuery功能介绍 (1)jQuery的引入方式 (2)选择器 (3)筛选 (4)文本操作 (5) ...
- DDD漫想
领域专用语言 领域驱动设计(Domain Driver Design)开发中,最令我震撼的是领域专用语言(Domain specific language),领域专用语言专注于描述当前领域内的业务细节 ...
- fastjson的JSONArray转化为泛型列表
背景:一个复杂结构体内部可能有array的数据,例如:{name:"test",cities:[{name:"shanghai",area:1,code:200 ...
- PLSQL Developer概念学习系列之如何正确登录连接上Oracle(图文详解)
不多说,直接上干货! 进入PLSQL Developer 1.双击 2.得到 比如,我这里安装的是 全网最详细的Windows系统里Oracle 11g R2 Database服务器端(64bit)的 ...
- Eclipse \ MyEclipse \Scala IDEA for Eclipse里如何将控制台console输出的过程记录全程保存到指定的文本文件(图文详解)
不多说,直接上干货! 问题详情 运行Java程序的时候,控制台输出过多,或者同时运行多个Java程序,输出结果一闪而过的时候,可以考虑将将控制台输出,改为输出到文本文件.无须修改Java代码,引入流这 ...
- 分析Item
分析Item例子1: class Parent { /* <init>() { super(); // JCES树节点,Item(void) px = 0; // JCES树节点,Assi ...
- Ceph 块设备 - 块设备快速入门
目录 一.准备工作 二.安装 Ceph 三.使用块存储 一.准备工作 本文描述如何安装 ceph 客户端,使用 Ceph 块设备 创建文件系统并挂载使用. 必须先完成 ceph 存储集群的搭建,并 ...
- Tomcat学习总结(15)—— Tomcat优化时的参数分析
(1).maxHttpHeaderSize=”8192” 此选项用于配置:来自于客户端请求的Request和Response的HTTP header 的最大长度,以字节计算.如果不设置,该属性为409 ...