exception org.hibernate.exception.GenericJDBCException: could not insert: [TsisModel.Ttest]
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2186)
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2666)
org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:550)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:546)
TsisUseBean.TtestAdapter.insert(TtestAdapter.java:44)
TsisUseBean.TtestAdapter.register(TtestAdapter.java:51)
TsisAction.TtestAction.execute(TtestAction.java:19)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
root cause java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]无法将 NULL 值插入列 'TTid',表 'Tsisdb.dbo.Ttest';该列不允许空值。INSERT 失败。
com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
com.microsoft.jdbc.base.BaseStatement.executeInternal(Unknown Source)
com.microsoft.jdbc.base.BasePreparedStatement.execute(Unknown Source)
org.hibernate.id.IdentityGenerator$InsertSelectDelegate.executeAndExtract(IdentityGenerator.java:138)
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2186)
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2666)
org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:550)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:546)
TsisUseBean.TtestAdapter.insert(TtestAdapter.java:44)
TsisUseBean.TtestAdapter.register(TtestAdapter.java:51)
TsisAction.TtestAction.execute(TtestAction.java:19)

为了简略,异常没有贴完

解决方案 »

  1.   

    你的Ttest表的'TTid'列式不允许为null值
    你插入的时候插入了null值
      

  2.   

    用的myeclipse和  sql server 2000hibernate配置文件:
    <?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> <!-- JDBC驱动程序 -->
    <property name="connection.driver_class">
    com.microsoft.jdbc.sqlserver.SQLServerDriver
    </property> <!-- JDBC URL -->

    <property name="show_sql">true</property>

    <property name="hibernate.connection.url">
    jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=Tsisdb
    </property> <property name="hibernate.connection.username">sa</property> <property name="hibernate.connection.password">Fish890315</property> <property name="hibernate.connection.pool_size">100</property> <property name="show_sql">false</property> <!-- Mapping files -->
    <property name="dialect">
    org.hibernate.dialect.SQLServerDialect
    </property>
    <mapping resource="TsisModel/Ttest.hbm.xml" /></session-factory>
    </hibernate-configuration>
    hbm文件:
    <?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="TsisModel.Ttest" table="Ttest" >  
            <id name="Ttid" >  
                <column name="Ttid" length="20" not-null="true"/>  
                <generator class="native" />  
            </id>        
        </class>  
    </hibernate-mapping>  POJO类:
    package TsisModel;public class Ttest {
    private String Ttid; public void setTtid(String ttid) {
    Ttid = ttid;
    } public String getTtid() {
    return Ttid;
    }
    }Adapter调用类:
    package TsisUseBean;import TsisModel.Teacher;
    import TsisModel.Ttest;
    import java.util.List;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;public class TtestAdapter {
    SessionFactory sessionFactory=null;
        Session session=null;
        Transaction transaction;
    String hql="";
    public TtestAdapter(){
    sessionFactory=new Configuration().configure().buildSessionFactory();
    }
    public void open(){
    session=sessionFactory.openSession();
    transaction=session.beginTransaction();
    }
    public void close(){
    session.close();
    sessionFactory.close();
    }
    public List query(String hql){
    open();
    List retList=null;
    try{
    Query query=session.createQuery(hql);
    retList=query.list();
    session.close();
    return retList;
    }catch(Exception e){
    e.printStackTrace();
    }
    return retList;
    }
    public void insert(Ttest t){
    this.open();
    System.err.println("!!"+t.getTtid());
    session.save(t);
    transaction.commit();
    session.close();
    }
    public boolean register(String id){
    Ttest tr=new Ttest();
    tr.setTtid(id);
    this.insert(tr);
    return true;
    }
    }执行时的action:
    package TsisAction;import TsisModel.Ttest;
    import TsisUseBean.TtestAdapter;public class TtestAction {
    private String Ttid; public void setTtid(String ttid) {
    Ttid = ttid;
    } public String getTtid() {
    return Ttid;
    }

    public String execute(){
    TtestAdapter tp=new TtestAdapter();
    tp.register(Ttid);
    return "SUCCESS";
    }
    }
    另外错误提示说,不允许插入空值,可是我确实是没有插入空值,在jsp页面中输入String类型数据后交给action处理
    数据库内容:
    Tsisdb数据库下   Ttest表 表中只有一个主键  Ttid  varchar (20)  求各位大神帮助啊
      

  3.   

    自己debug啊,这个不是什么诡异问题
    你能确定Ttid不为null吗???
    前台输入了,后台买得到呢?
      

  4.   

    确定不为空,后台使用system.err.println(Ttest.getTTid())可以查看到值
      

  5.   

    <column name="Ttid" length="20" not-null="true"/>   
      <generator class="native" />   
      </id>  
    改为
    <column name="Ttid" length="20" not-null="true"/>   
      <generator class="assigned " />   
      </id>