menu
more_vert
org.hibernate.HibernateException: Wrong column type

作者:dayu

  • <propertyname="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表格

    [sql]view plaincopy


    1. CREATETABLEUSER(
    2. user_idCHAR(32)NOTNULLPRIMARYKEY,
    3. nameVARCHAR(16)NOTNULL,
    4. sexCHAR(1),
    5. ageINT
    6. );

    Java类User.java

    [java]view plaincopy


    1. packageonlyfun.caterpillar;
    2. publicclassUser{
    3. privateStringid;
    4. privateStringname;
    5. privatecharsex;
    6. privateintage;
    7. publicintgetAge(){
    8. returnage;
    9. }
    10. publicStringgetId(){
    11. returnid;
    12. }
    13. publicStringgetName(){
    14. returnname;
    15. }
    16. publicchargetSex(){
    17. returnsex;
    18. }
    19. publicvoidsetAge(inti){
    20. age=i;
    21. }
    22. publicvoidsetId(Stringstring){
    23. id=string;
    24. }
    25. publicvoidsetName(Stringstring){
    26. name=string;
    27. }
    28. publicvoidsetSex(charc){
    29. sex=c;
    30. }
    31. }


    User.hbm.xml文件配置

    [html]view plaincopy


    1. <?xmlversion="1.0"?>
    2. <!DOCTYPEhibernate-mapping
    3. PUBLIC"-//Hibernate/HibernateMappingDTD//EN"
    4. "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    5. <hibernate-mapping>
    6. <classname="onlyfun.caterpillar.User"table="USER">
    7. <idname="id"type="string"unsaved-value="null">
    8. <columnname="user_id"sql-type="char(32)"/>
    9. <generatorclass="uuid.hex"/>
    10. </id>
    11. <propertyname="name"type="string"not-null="true">
    12. <columnname="name"length="16"not-null="true"/>
    13. </property>
    14. <propertyname="sex"type="char"/>
    15. <propertyname="age"type="int"/>
    16. </class>
    17. </hibernate-mapping>


    hibernate.cfg.xml文件配置

    [html]view plaincopy


    1. <hibernate-configuration>
    2. <session-factory>
    3. <propertyname="show_sql">true</property>
    4. <propertyname="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
    5. <propertyname="connection.driver_class">com.mysql.jdbc.Driver</property>
    6. <propertyname="connection.url">jdbc:mysql://localhost/HibernateTest</property>
    7. <propertyname="connection.username">caterpillar</property>
    8. <propertyname="connection.password">123456</property>
    9. <mappingresource="User.hbm.xml"/>
    10. </session-factory>
    11. </hibernate-configuration>


    上面只是个简单的配置实例,主要在于展示User的char(32)类型的ID如何配置。

    刚接触Hibernate,有些简单的问题也会搞得你晕头转向,以此作为自己的学习笔记,欢迎指导!

    org.hibernate.HibernateException: Wrong column type

    原文地址:http://www.cnblogs.com/mannixiang/p/7222240.html