1。Tproduct表为:
主键 Product_id    varchar 50
     Product_name  varchar 50
2。Tproduct.hbm.xml如下:
<?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 package="com.hiber">    <class name="Tproduct" table="TProduct">
        <id name="productId" column="Product_id" type="string">
            <generator class="native"/>
        </id>
 
        <property name="productName" column="Product_name" type="string" />
    </class>
    
</hibernate-mapping>3。插入程序代码为 :Transaction tran = null;
try {
Session session = HibernateSessionFactory.currentSession();
tran = session.beginTransaction();
Tproduct tp = new Tproduct();
tp.setProductId("eeeee");

tp.setProductName("fffff");
session.save(tp);
session.flush();
} catch (HibernateException e) {
e.printStackTrace();
 Assert.fail(e.getMessage());
if (tran != null) {
try {
tran.rollback();
} catch (HibernateException e1) {
e1.printStackTrace();
} } }

4。报错内容如下:
org.hibernate.exception.ConstraintViolationException: could not insert: [com.hiber.Tproduct]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:63)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
。。
Caused by: com.jnetdirect.jsql.JSQLException: 无法将 NULL 值插入列 'Product_id',表 'querytest.dbo.TProduct';该列不允许空值。INSERT 失败。

解决方案 »

  1.   

    <generator class="native"/>将native改为assigned
      

  2.   

    <generator class="increment"/>试试
      

  3.   

    你的主键是由外部指定还是assigned吧没有看清楚是varchar的
      

  4.   

    看错误信息写的挺明白了嘛, 无法将 NULL 值插入列 'Product_id'. 估计是tp.setProductId("eeeee");这句有问题. 一般来说Product_id这种字段肯定是Int型的啊, 你设置成字符串了当然不行, 换整数试试.
      

  5.   

    谢谢弟兄门啊 但是我以前就是用的varchar是没有问题的啊