我有一个小项目,应用的小型开源的本地数据库SmallSql。
底层数据访问用的Hibernate,做数据测试时,插入数据出现下面的错误,不知道是哪里的错。
错误信息如下:
[SmallSQL]Null values are not valid for column 'id'.
其中id是我的那个表的id属性,设置的主键。
我又做了下查询,可以按id查询出正确结果,不知道问题出在哪,有用smallsql的大大帮下忙,谢谢了。那个表的映射文件如下:<?xml version="1.0" encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="xxxx.dataaccess.domain">
<class name="LastData" table="lastdata">
<id name='id' column="id">
<generator class="native"/>
</id>
<property name="key" column="key"/>
<property name="value" column="value"/>
</class>
</hibernate-mapping>hibernate的配置文件如下:<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration>
    <session-factory>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.url">jdbc:smallsql:data</property>
        <property name="connection.driver_class">smallsql.database.SSDriver</property>
<property name="connection.pool_size">1</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="connection.autoReconnect">true</property>
        <property name="connection.autoReconnectForPools">true</property>
        <property name="connection.is-connection-validation-required">true</property>
        
        <mapping resource="lastdata.hbm.xml"/>
    </session-factory>    
</hibernate-configuration>

解决方案 »

  1.   

    你是不是有对id进行插入的操作,提示貌似是插入了null.
      

  2.   

    我对id没有赋任何值。
    部分代码如下 :LastDataDAO last = new LastDataDAOImpl();
    LastData lastData = new LastData();
    lastData.setKey("testKey");
    lastData.setValue("testValue");
    // last.query(8);
    // last.insert(lastData);

      

  3.   

    表里有2条记录,我测试时手工输入的,
    last.query();这名可以正确执行,
    下面那句就报错了。
      

  4.   

    so, 你要来句lastData.setId(1);  么?
      

  5.   

    你设置id为主键,没设置自增? 数据库里把id增量标识改下吧!
      

  6.   


    能给下脚本不,这个不是很熟悉呢   -.-
    我用的JDBC Navigator, 这个让我花了一上午才搞 明白怎么用它来建表(JDBC Navigator是Smallsql的doc中推荐的,也没找到相应的mysql转smallsql的工具 所以才用的JDBC Navigator自己建表来的)
      

  7.   

    create table lastdata (
      id int not null,
      key varchar(20) not null,
      value varchar(100) default null,
      primary key (id)
    )
      

  8.   

    hibernate里面主键已经自增了呀~
      

  9.   

    貌似我应该添加个 auto_increment = 2  么?
      

  10.   

    出错了 这个工具太让人郁闷了 语法完全没错误啊
    create table lastdata(
      id int not null, 
      keyvarchar(20) not null,
      value varchar(100) default null, 
      primary key (id)

    AUTO_INCREMENT=2;
      

  11.   

    create   table   lastdata( 
        id   int  identity(1,1)  not   null,   
        keyvarchar(20)   not   null, 
        value   varchar(100)   default   null,   
        primary   key   (id) 
    )   
    AUTO_INCREMENT=2;试试!
      

  12.   

    恶,总算成功了,看文档不仔细啊:
    http://www.smallsql.de/doc/sqlsyntax.html#CREATETABLE那个IDENTITY是亮点呢谢谢楼上的各位了,结账啦。
      

  13.   

    不过话说回来  那个samllsql支持的关键还真是少呢,不能设置字符集,不能设置数据引擎,也不能设置自增长量....
    我的一天啊 哎