有3张表  
nuser表代表用户表,id为主键,自增.其中有个username的字段.  
shenfenzheng代表身份证表.id为主键,自增.里面有shenfenzhenghao字段代表身份证号,userid代表关联到nuser表的id,外键,  
还有个dingdan表代表定单表,id为主键,自增.里面有个dingdanhao字段,有个userid字段关联到nuser表的id,外键.  这个关系是nuser表和shenfenzheng表是一对一关系,nuser和dingdan是一对多关系(双向关联), 在添加定单的时候出现了异常,日志如下:
Hibernate: select nuser0_.id as id0_1_, nuser0_.username as username0_1_, shenfenzhe1_.id as id2_0_, shenfenzhe1_.shenfenzhenghao as shenfenz2_2_0_, shenfenzhe1_.userid as userid2_0_ from hibernate.nuser nuser0_ left outer join hibernate.shenfenzheng shenfenzhe1_ on nuser0_.id=shenfenzhe1_.userid where nuser0_.id=?
Hibernate: select dingdan0_.userid as userid1_, dingdan0_.id as id1_, dingdan0_.id as id1_0_, dingdan0_.userid as userid1_0_ from hibernate.dingdan dingdan0_ where dingdan0_.userid=? order by dingdan0_.id
Hibernate: insert into hibernate.dingdan values ( )
could not insert: [databasepo.Dingdan]代码如下:
    <class name="databasepo.Nuser" table="nuser" catalog="hibernate">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native"></generator>
        </id>
        <property name="username" type="java.lang.String">
            <column name="username" length="20" not-null="true" />
        </property>
        <one-to-one name="shenfenzheng" class="databasepo.Shenfenzheng" cascade="all" property-ref="nuser"/>
        <set name="dingdan" order-by="id" cascade="all" inverse="true">
        <key column="userid" not-null="true" />
        <one-to-many class="databasepo.Dingdan"/>
        </set>
    </class> <class name="databasepo.Dingdan" table="dingdan" catalog="hibernate">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native"></generator>
        </id>
       <many-to-one name="nuser" class="databasepo.Nuser" cascade="none" column="userid" insert="false">
       </many-to-one>
    </class>    <class name="databasepo.Shenfenzheng" table="shenfenzheng" catalog="hibernate">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native"></generator>
        </id>
        <property name="shenfenzhenghao" type="java.lang.String">
            <column name="shenfenzhenghao" length="20" not-null="true" />
        </property>
        <many-to-one name="nuser" class="databasepo.Nuser" unique="true" column="userid"/>
    </class>
public void iInsertDingdan(Integer userid)
{
//双向关联
Session session=CreateSession.createSession();
Transaction tx=null;
tx=session.beginTransaction();
tx.begin();
Nuser nuser=(Nuser)session.get(Nuser.class,userid);
Dingdan dingdan=new Dingdan();
dingdan.setNuser(nuser);
nuser.getDingdan().add(dingdan);

try
{
session.save(nuser);
session.flush();
tx.commit();
}
catch(Exception e)
{
if(tx!=null)
tx.rollback();
System.out.println(e.getMessage());
}
finally
{
session.close();
}
}
3个类的代码如下:
public class Nuser implements java.io.Serializable { // Fields private Integer id;
private String username;
private Shenfenzheng shenfenzheng;
private Set dingdan; // Constructors /** default constructor */
public Nuser() {
} /** full constructor */
public Nuser(String username) {
this.username = username;
} // Property accessors public Integer getId() {
return this.id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return this.username;
} public void setUsername(String username) {
this.username = username;
} public Shenfenzheng getShenfenzheng() {
return shenfenzheng;
} public void setShenfenzheng(Shenfenzheng shenfenzheng) {
this.shenfenzheng = shenfenzheng;
} public Set getDingdan() {
if(dingdan==null)
dingdan=new HashSet();
return dingdan;
} public void setDingdan(Set dingdan) {
this.dingdan = dingdan;
}
}
public class Dingdan implements java.io.Serializable { // Fields private Integer id;
private Long userid;
private Nuser nuser; // Constructors /** default constructor */
public Dingdan() {
} /** full constructor */
public Dingdan(Long userid) {
this.userid = userid;
} // Property accessors public Integer getId() {
return this.id;
} public void setId(Integer id) {
this.id = id;
} public Long getUserid() {
return this.userid;
} public void setUserid(Long userid) {
this.userid = userid;
} public Nuser getNuser() {
return nuser;
} public void setNuser(Nuser nuser) {
this.nuser = nuser;
}


}
public class Shenfenzheng implements java.io.Serializable { // Fields private Integer id;
private Long userid;
private String shenfenzhenghao;
private Nuser nuser; // Constructors /** default constructor */
public Shenfenzheng() {
} /** full constructor */
public Shenfenzheng(Long userid, String shenfenzhenghao) {
this.userid = userid;
this.shenfenzhenghao = shenfenzhenghao;
} // Property accessors public Integer getId() {
return this.id;
} public void setId(Integer id) {
this.id = id;
} public Long getUserid() {
return this.userid;
} public void setUserid(Long userid) {
this.userid = userid;
} public String getShenfenzhenghao() {
return this.shenfenzhenghao;
} public void setShenfenzhenghao(String shenfenzhenghao) {
this.shenfenzhenghao = shenfenzhenghao;
} public Nuser getNuser() {
return nuser;
} public void setNuser(Nuser nuser) {
this.nuser = nuser;
}
}

解决方案 »

  1.   

    <class name="databasepo.Dingdan" table="dingdan" catalog="hibernate">
             <id name="id" type="java.lang.Integer">
                 <column name="id" />
                 <generator class="native"> </generator>
             </id>
            <many-to-one name="nuser" class="databasepo.Nuser" cascade="none" column="userid" insert="false">
            </many-to-one>
         </class> 
    cascade="all"看看
      

  2.   

    不好意思.是我inverse写成了insert