<generator class="native"></generator>
--------------------------
    native是由 hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。所以你的h.setId("2");是有问题的,hibernate会给你根据你使用的数据库自行生成1个id,把它删掉试试。如果你想要自己设定的话,http://it.icxo.com/htmlnews/2005/01/17/551980.htm来确定主键的生成方式。(中文的,说得比较详细)

解决方案 »

  1.   

    删除 h.setId("2"); 这行还是一样,不能插入空值,把 <generator class="native"></generator> 改为 class="increment"报错:
     this id generator generates long, integer, short
    应该是说主建应该是 long,integer,short,类型 1楼朋友提供的连接里说ID应定义为VARCHAR2显然是不对的。毛病应该不是出在这里,也许是配置哪出错了吧?
      

  2.   

    hibernate提供了产生自动增长类型主键的多种策略,这里以increment为例说明具体用法:
    1、在数据库中建立表,主键名称为id,类型为varchar2(字符串型)
      

  3.   

    就是了,要把varchar2改成数字型 的
      

  4.   

    这个setID()是不需要的,hibernate会自动产生一个值然后给它
      

  5.   

    试过了把主建改成int型就成功插入了一条数据,
    但是控制台:
    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    不知道什么意思,是警告?
    我想自己设ID的值请教怎么做?
      

  6.   

    把那个<id name="id" type="java.lang.String">
                <column name="id" length="50" />
                <generator class="native"></generator>
            </id>
    把native变成assigned
      

  7.   

    那个没事,是由于没有配置log4j而报的警告信息.
    <id name="id" type="java.lang.int"/>
    然后就可以在程序中用setId(),来设置要添加的id了.
          
      

  8.   

    主健最好用逻辑健,不要自己赋值,我就用过int,long
      

  9.   

    昨天在家里试了用Assigned,好象还有点问题,回家试试
      

  10.   

    主键ID摄自增,一般是int、long型,程序里不需要对它进行set,会自动给你个数值,一般都是在设计数据库时作的