class User{
 int uid;
 String name;
 Card card;
 ...
}class Card{
 int cid;
 String cardNo;
 User user;
}<class name="User" table="User">
      <id name="uid" column="uid">
        <generator class="foreign">
                 <param name="property">card</param>
         </generator>
    </id>
         <property name="name"></property>
<one-to-one name="card" constrained="true" cascade="all"></one-to-one>
</class> <class name="Card" table="Card" catalog="ssh">
        <id name="cid">
         <generator class="assigned"></generator>
        </id>
<property name="cardNo"></property>
<one-to-one name="user" cascade="all"></one-to-one>
</class> 我想修改Card中的cid 同时影响到User中的uid的修改 但是这样会报错:
org.hibernate.HibernateException: identifier of an instance of Card was altered from 1 to 2请问要实现我的目的应该怎么做才行

解决方案 »

  1.   

    什么地方改成one-to-many哦 还要加set吗?能不能说得具体点 谢谢。
      

  2.   

    显然cid与uid的关系不是一对一的关系,建议楼主改成1楼方式试试
      

  3.   

    我是想让uid 跟cid 一对一对应 uid跟cid值是一样的 cid改了后 uid 也跟着改 该怎么办呢
      

  4.   


    把配置文件改成这样试一试,然后在生成一下表看看行不,因为你的那个配置文件上的关系是user表上的uid是参照card表上的cid的,也就是说只有cid改了的话,uid才会跟着改,反过来则不行。
    <class name="User" table="User"> 
        <id name="uid" column="uid"> 
          <generator class="assign"/> 
        </id> 
            <property name="name"> </property> 
    <one-to-one name="card" cascade="all"> </one-to-one> 
    </class> <class name="Card" table="Card" catalog="ssh"> 
            <id name="cid"> 
               <generator class="foreign"> 
                    <param name="property">user </param> 
               </generator> 
            </id> 
    <property name="cardNo"> </property> 
    <one-to-one name="user" constrained="true" cascade="all"></one-to-one> 
    </class> 
      

  5.   

    谢谢哦 我的目的就是改cid uid也会跟着改 但是像我这样配置 一改cid 就出错:
    org.hibernate.HibernateException: identifier of an instance of Card was altered from 1 to 2
      

  6.   

        ,先不说其他的,类就有问题:
    class User{
    Long uid;//一定成Long
    String name;
    Card card;
    ...
    }class Card{
        Long cid;//一定要成Long
        String cardNo;
        User user;
    }
      

  7.   

    uid 是主键跟外键 
    cid 是主键
      

  8.   

    按楼主的意思是唯一外键吧,这样试试
    <class name="User" table="User"> 
        <id name="uid" column="uid"> 
          <generator class="assign"/> 
        </id> 
            <property name="name"> </property> 
    <one-to-one property-ref="user" name="card" cascade="all"> </one-to-one> 
    </class> <class name="Card" table="Card" catalog="ssh"> 
            <id name="cid"> 
              <generator class="foreign"> 
                    <param name="property">user </param> 
              </generator> 
            </id> 
    <property name="cardNo"> </property> 
    <one-to-one unique="true" name="user" cascade="all"> </one-to-one> 
    </class>