楼主用的是oracle数据库吧,错误原因是没有序列,可以把生成器改成identity啊。

解决方案 »

  1.   


    对,是oracle数据库
    把生成器改成identity后也报错
    Hibernate: insert into LUNATIC.DEPT (NAME, LOCATION, OPERATION) values (?, ?, ?)
    org.hibernate.exception.ConstraintViolationException: could not insert: [com.lunatic.vo.Dept]
    Caused by: java.sql.SQLException: ORA-01400: cannot insert NULL into ("LUNATIC"."DEPT"."DID")
      

  2.   

    ORACLE的SEQUENCE有个默认的,而MYSQL不支持SEQUNCE,但有自己的策略.<column name="DID" precision="22" scale="0"/> 
    这样的定义没有见过,但是从字面上来看是对精度的约束,这样的话就有可能是和你定义的SEQUNCE有冲突的原因.可以检查一下你的SEQUNCE的定义是否冲突了.....
    CREATE SEQUENCE customers_seq
     START WITH     1000
     INCREMENT BY   1
     NOCACHE
     NOCYCLE;
      

  3.   

    找不到你的SEQUENCE的值,且你定义的列不许为空,所以不能够插入...
      

  4.   


    生成器写的是native 用session.save(object)插入,怎么用sequence
      

  5.   

    hibernate_sequence这个序列你的自己创建一个才行。Oracle 里面使用sequence,不建议使用native,还是自己控制比较好。
      

  6.   

    native
    根据底层数据库的能力选择identity, sequence 或者hilo中的一个。 
      

  7.   

    好像Hibernate3默认为所有使用Sequence的ID项都关联一个名为'hibernate_sequence'的Sequence.
    你只要在oracle中创建这个Sequence就行:
    create sequence hibernate_sequence start with 1 increment by 1;