表tbltime如下:
列名                数据类型            长度            允许空
id                bigint            8                     标识列,标识增量为1
timeid             nchar            6             √
time_segment     nvarchar           20                    (主键)
status           nvarchar           2             √
modifyuser       nvarchar           50            √
modifytime       datetime           8             √Tbltime.hbm.xml文件的内容如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="student.message.Tbltime" table="tbltime" schema="dbo"
catalog="student">
<id name="timeSegment" type="java.lang.String">
<column name="time_segment" length="20" />
<generator class="assigned" />
</id>
<property name="id" type="java.lang.Long">
<column name="id" not-null="true" />
</property>
<property name="timeid" type="java.lang.String">
<column name="timeid" length="6" />
</property>
<property name="status" type="java.lang.String">
<column name="status" length="2" />
</property>
<property name="modifyuser" type="java.lang.String">
<column name="modifyuser" length="50" />
</property>
<property name="modifytime" type="java.util.Date">
<column name="modifytime" length="23" />
</property>
</class>
</hibernate-mapping>类Tbltime如下:
package student.message;import java.util.Date;public class Tbltime implements java.io.Serializable {
private static final long serialVersionUID = -6492070262736379025L; private String timeSegment; private Long id; private String timeid; private String status; private String modifyuser; private Date modifytime; public Tbltime() {
} public Tbltime(String timeSegment, Long id) {
this.timeSegment = timeSegment;
this.id = id;
} public Tbltime(String timeSegment, Long id, String timeid, String status,
String modifyuser, Date modifytime) {
this.timeSegment = timeSegment;
this.id = id;
this.timeid = timeid;
this.status = status;
this.modifyuser = modifyuser;
this.modifytime = modifytime;
} public String getTimeSegment() {
return this.timeSegment;
} public void setTimeSegment(String timeSegment) {
this.timeSegment = timeSegment;
} public Long getId() {
return this.id;
} public void setId(Long id) {
this.id = id;
} public String getTimeid() {
return this.timeid;
} public void setTimeid(String timeid) {
this.timeid = timeid;
} public String getStatus() {
return this.status;
} public void setStatus(String status) {
this.status = status;
} public String getModifyuser() {
return this.modifyuser;
} public void setModifyuser(String modifyuser) {
this.modifyuser = modifyuser;
} public Date getModifytime() {
return this.modifytime;
} public void setModifytime(Date modifytime) {
this.modifytime = modifytime;
}
}运行时会报以下的错误:
org.hibernate.PropertyValueException: not-null property references a null or transient value: student.message.Tbltime.id这是为什么?

解决方案 »

  1.   

    你设置有问题<id name="timeSegment" type="java.lang.String"> 
    <column name="time_segment" length="20" /> 
    <generator class="assigned" /> 
    </id> 
    这段代码应该是设置当前的标志列
    <id name="id" type="java.lang.Integer"> 
    <column name="id" /> 
    <generator class="native"  /> 
    </id> 
    <property name="timeSegment" type="java.lang.String"> 
    <column name="timeSegment" not-null="true" /> 
    </property>
    而且你这个表有没有与别的表有 一对1 或许一对多 多对多 的关系的话需要在对表在进行修改。。
      

  2.   

    <generator class="native"  /> 

    <generator class="identity"  /> 
      

  3.   

    id  bigint  8 标识列,标识增量为1 根据这个设置,当然是选择
    <generator class="identity"  /> 详细的hibernate主键说明请参考 http://www.java2000.net/viewthread.jsp?tid=241
      

  4.   

    <id name="id" type="java.lang.String">
                <column name="ID" not-null="true" />
                <generator class="uuid" />
    </id>
    <generator class="uuid" />或者
    <generator class="native" />
    自增的我都是这么做的
      

  5.   

    <class name="student.message.Tbltime" table="tbltime" schema="dbo" 
    catalog="student"> 
    改成:
    <class name="student.message.Tbltime" table="tbltime"> 
      

  6.   

    谢谢上面各位的回答,但是问题是表中的主键是time_segment,而不是id,要实现的话,该如何改呢?
      

  7.   

    <generator class="native"  /> 
      

  8.   

    但是问题是表中的主键是time_segment,而不是id,要实现的话,该如何改呢?是谁改谁!
      

  9.   

    问题还没解决!问题的关键是:该表的主键是[color=#FF0000]time_segment,而不是id[/color]
      

  10.   

    dynamic-update="true"   +在主键的class里面....