Hibernate的xml配置文件中关于主键生成策略可能没写对,检查下previewId的属性配置。

解决方案 »

  1.   

    previed_id 数据库是非空的,而你又没有为其赋值,所以爆掉了。
    一般将previed_id做自增长就可以了(逻辑主键)。
      

  2.   

    可是hibernate不是会自动为oid赋值吗?
      

  3.   

    <hibernate-mapping>
        <class name="cn.edu.bjfu.phy.model.PreviewLibrary" table="preview_library" catalog="physical_exp">
            <id name="previewId" type="java.lang.Long">
                <column name="preview_id" />
                <generator class="identity" />
            </id>
            <many-to-one name="experiment" class="cn.edu.bjfu.phy.model.Experiment" fetch="select">
                <column name="experiment_id" not-null="true" />
            </many-to-one>
            <property name="model" type="java.lang.Integer">
                <column name="model" not-null="true">
                </column>
            </property>
            <property name="title" type="java.lang.String">
                <column name="title" length="65535" not-null="true" />
            </property>
            <property name="answer" type="java.lang.String">
                <column name="answer" length="10" not-null="true" />
            </property>
            <property name="peopleId" type="java.lang.Long">
                <column name="people_id" />
            </property>
            <property name="createTime" type="java.sql.Timestamp">
                <column name="create_time" length="19" />
            </property>
            <property name="modifyTime" type="java.sql.Timestamp">
                <column name="modify_time" length="19" />
            </property>
        </class>
    </hibernate-mapping>
    这个是配置文件 ,我们的主键生成策略都是identity,这样可以吗? 
    这个是experiment的实体类和hbm文件
    public class Experiment implements java.io.Serializable { // Fields private static final long serialVersionUID = 1L;
    /** 实验id */
    private Long experimentId;
    /** 实验名称 */
    private String experimentName;
    /** 实验内容 */
    private String content;
    /** 实验标志 :1=必做实验,2=选课通称,3=选修实验*/
    private Integer experimentTag;
    /** 选修是否开始:1=没开始;2=开始 */
    private Integer selectExpTag;
    /** 创建时间 */
    private Timestamp createTime;
    /** 修改时间 */
    private Timestamp modifyTime;
    /** 预习题库 */
    private Set previewLibraries = new HashSet(0);
    /** 学生选修的实验 */
    private Set peoples = new HashSet(0);
    /** 该实验的课程表 */
    private Set courses = new HashSet(0);
    /** 实验成绩表 */
    private Set scores = new HashSet(0);<hibernate-mapping>
        <class name="cn.edu.bjfu.phy.model.Experiment" table="experiment" catalog="physical_exp">
            <id name="experimentId" type="java.lang.Long">
                <column name="experiment_id" />
                <generator class="identity" />
            </id>
            <property name="experimentName" type="java.lang.String">
                <column name="experiment_name" length="100" not-null="true" />
            </property>
            <property name="content" type="java.lang.String">
                <column name="content" length="65535" />
            </property>
            <property name="experimentTag" type="java.lang.Integer">
                <column name="experiment_tag" not-null="true">
                </column>
            </property>
            <property name="selectExpTag" type="java.lang.Integer">
                <column name="select_exp_tag">
                </column>
            </property>
            <property name="createTime" type="java.sql.Timestamp">
                <column name="create_time" length="19" />
            </property>
            <property name="modifyTime" type="java.sql.Timestamp">
                <column name="modify_time" length="19" />
            </property>
            <set name="previewLibraries" inverse="true">
                <key>
                    <column name="experiment_id" not-null="true" />
                </key>
                <one-to-many class="cn.edu.bjfu.phy.model.PreviewLibrary" />
            </set>
            <set name="peoples" inverse="true">
                <key>
                    <column name="experiment_id" />
                </key>
                <one-to-many class="cn.edu.bjfu.phy.model.People" />
            </set>
            <set name="courses" inverse="true">
                <key>
                    <column name="experiment_id" not-null="true" />
                </key>
                <one-to-many class="cn.edu.bjfu.phy.model.Course" />
            </set>
            <set name="scores" inverse="true">
                <key>
                    <column name="experiment_id" />
                </key>
                <one-to-many class="cn.edu.bjfu.phy.model.Score" />
            </set>
        </class>
    </hibernate-mapping>
      

  4.   

    previewId 你这个没有赋值,而且这个字段在数据库表中是非空的,没有默认值,所以报错
      

  5.   

    我解决啦  就是你们说的那个问题 你们太棒啦! 我不小心把数据库的previewlibrary的主键的自动递增给勾掉了
    谢谢!  以后我就没多少积分了,还怎么提问啊