我用的hibernate3
数据库SQL SERVER2000
JDK1.5
TOMCAT 5.5
MyEclipse开发数据库就只有ID(增长)和name属性
Student.java:package com.dot.tiky;/**
 * @hibernate.class
 *      table="student"
 *      dynamic-update="true"
 *      dynamic-insert="true"
 */public class Student{    private long id;
private String name;

/**
 *  @hibernate.id
 *  generator-class="uuid.hex"
 */ public long getID(){
    return this.id;
}

public void setID(long id){
    this.id=id;
}

  /** 
     * @hibernate.property 
     *  length="20" 
     *  声明表中对应的字段  
     */  public String getName(){
    return this.name;
} public void setName(String name){
    this.name=name;
}
}Test.java:
package com.dot.tiky;import org.hibernate.*;
import org.hibernate.cfg.*;public class Test { public void doInsert() throws Exception{
try{
SessionFactory sf=new Configuration().configure().buildSessionFactory();
Session session=sf.openSession();
Transaction tx=session.beginTransaction();

Student s=new Student();
s.setName("heihei!");

session.save(s);
tx.commit();
session.close();
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}IllegalArgumentException occurred while calling setter of com.dot.tiky.Student.ID
谢谢老鸟~~~~~~~~~~~

解决方案 »

  1.   

    generator-class="uuid.hex" 改成generator-class="native"试试看
      

  2.   

    是不是需要看看映射文件:
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping
    >
        <class
            name="com.dot.tiky.Student"
            table="student"
            dynamic-update="true"
            dynamic-insert="true"
        >        <id
                name="ID"
                column="ID"
                type="long"
            >
                <generator class="uuid.hex">
                  <!--  
                      To add non XDoclet generator parameters, create a file named 
                      hibernate-generator-params-Student.xml 
                      containing the additional parameters and place it in your merge dir. 
                  --> 
                </generator>
            </id>        <property
                name="name"
                type="java.lang.String"
                column="name"
                length="20"
            />        <!--
                To add non XDoclet property mappings, create a file named
                    hibernate-properties-Student.xml
                containing the additional properties and place it in your merge dir.
            -->    </class></hibernate-mapping>
    所有的资料都发上来了,就是不知道哪的问题!!!
      

  3.   

    *  generator-class="uuid.hex"  <generator class="uuid.hex">你明明用的就是 guid啊.同意 llike_1983(只好一次) 的.//没用过sql server.
      

  4.   

    问题出在uuid.hex  uuid.hex  支持类型为String而不支持long把ID的类型改成String 就可以了
      

  5.   

    uuid.hex  是16进制 .包含字符 A B C D E
      

  6.   

    经过我调整,映射文件没问题了,可又抱这个错误
    database product name cannot be null
      

  7.   

    我加上这句以后
    cfg.addClass(Student.class);
    又不抱上面的错误了,抱了个:Error reading resource: com/dot/tiky/Student.hbm.xml 
    郁闷啊,总是一波三折啊~
      

  8.   

    把ID的类型改成String 的同时
    映射文件也要做如下修改
            <id
                name="ID"
                column="ID"
                type="long"
            >该成         <id
                name="ID"
                column="ID"
                type="java.lang.String"
            >
    如果你还希望你的id是long 型的.请把generator-class="native"
      

  9.   

    楼上的,这个我已经改了,我查了资料,那样的错误是说配置文件有错
    generator-class="identity"//我用的是这个,因为我是SQL SERVER数据库不用自动适应,可是还有哪错呢
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping
    >
        <class
            name="com.dot.tiky.Student"
            table="student"
            dynamic-update="true"
            dynamic-insert="true"
        >        <id
                name="id"
                column="ID"
                type="long"
            >
                <generator class="identity">
                  <!--  
                      To add non XDoclet generator parameters, create a file named 
                      hibernate-generator-params-Student.xml 
                      containing the additional parameters and place it in your merge dir. 
                  --> 
                </generator>
            </id>        <property
                name="name"   //莫非是这里不能name?名字冲突?
                type="java.lang.String"
                column="name"
                length="20"
            />        <!--
                To add non XDoclet property mappings, create a file named
                    hibernate-properties-Student.xml
                containing the additional properties and place it in your merge dir.
            -->    </class></hibernate-mapping>
      

  10.   

    配置文件里面的type是higernate的类型,不是java类型,应该是string而不是java.lang.String
      

  11.   

    你的get,set方法有误
        public long getId() {
            return this.id;
        }    public void setId(long id) {
            this.id = id;
        }这样才对
      

  12.   

    也许数据类型我还没清楚,关于java.lang.String
    这个类型是用XDoclet生成的,你用了就知道了??我的GETTER,SETTER 方法对的啊,哪有问题??
      

  13.   

    注意:
    你的是
    public long getID(){
        return this.id;
    }

    public void setID(long id){
        this.id=id;
    }
      

  14.   

    Hibernate找get,set的时候是区分大小写的!
      

  15.   

    generator-class="uuid.hex" ,sql server2000可能不支持这个 uuid.hex放另一种看看!
      

  16.   

    我也支持like的说法
    hibernate支持数据库自动增长的
    用native 就可以啦
    包括oracle 他都能够帮助实现自动增长
      

  17.   

    TO:wangw1319(于风) (
    我真没明白你的意思?!我的配置文件的确以前是name="ID"//你说的这里吧
    后来你没看到我已经改了么,改成name="id"
    至于你说的getId()和我的getID有啥区别?你别告诉我是这里吧,这只是方法名,它找的是变量而不是方法吧
    至于那么id自动增长的问题,我已经改过来了,请回帖的朋友,耐心一点看完,谢谢!!!!
      

  18.   

    引用----至于你说的getId()和我的getID有啥区别?你别告诉我是这里吧,这只是方法名,它找的是变量而不是方法吧我说的就是方法名的区别.可别告诉我你不知道哦!每一个变量都有固定的get,set方法
    hibernate是这样对应方法名的变量的的第一个字母大写,其后的变量如果大写,数据库对应的字段前必有一个下划线如:数据库对应字段"i_d"对应的get,set方法名才是getID,setID
      

  19.   

    没用过hibernate   long 与Long
      

  20.   

    <id
                name="id"既然你这样写的.
    那么就应该用getId和setId,只是属性名首字母需要且必须也只能大写.
    这个是javabean规范,根数据库没关系.
      

  21.   

    最近比较忙,这个放了一边
    很感谢楼上的朋友们,今晚下班我回去看看!
    关于规范问题,其实我是比较规范,但还真的在id这个地方,我做的项目里的BEAN还真的是
    getID()呢?(好象是我觉得ID比Id好看些)!结果,这就影响到了我的hibernate配置,我回去改改看,先谢谢,有问题我再继续发问,直到实现我的第1个hibernate程序,也还请帮过的朋友耐心些吧!:)