我所有的代码:
我的更新代码为:
[code]
  public void updateTeacher(String tid,teacher tea){
              teacher t= (teacher)getHibernateTemplate().load(teacher.class,tid);
              t.setName(tea.getName());
              t.setSex(tea.getSex());
              t.setZhiwei(tea.getZhiwei());
              getHibernateTemplate().update(t);
            }[/code]父类映射文件:[code]
 <class name="com.bean.teacher" table="teacher" lazy="true">
        <id name="tid" column="tid">
            <generator class="uuid.hex"/>
        </id>
        <property name="name" column="name" />
        <property name="sex" column="sex" />
<property name="zhiwei" column="zhiwei" />
 <set name="student" lazy="true" inverse="true" cascade="all">
<key column="tid"/>
<one-to-many class="com.bean.student"/>
</set>
    </class>
[/code]
子类映射文件:[code]
 <class name="com.bean.student" table="student">
        <id name="sid" column="sid"  unsaved-value="null" >
            <generator class="uuid.hex"/>
        </id>
        <property name="name" column="name" />
        <property name="sex" column="sex" />
<property name="grade" column="grade" />
<property name="sclass" column="sclass" /> <many-to-one name="teacher" class="com.bean.teacher" column="tid" not-null="true"/>
    </class>
[/code]为什么每次更新都是添加了一条新的信息呢?我搜索了一些资料;都是说要这样:
[code]Parent parent = (Parent) session.load(Parent.class, id); 
Child child = (Child) session.load(Child.class, childId); child.setParent(parent); 
child.setName("sun"); parent.addChild(child); 
s.update(parent); s.flush(); 
tx.commit(); 
s.close();
[/code]
才能更新,但是现在我的参数只有父类的:tid,没有子类的childId,那我该怎样才能更新呢??????

解决方案 »

  1.   

    晕,你的getHibernateTemplate()包装的问题吧,不知道你是怎么处理的,没必要对update,save,delete在包装拉,自己控制session的开与关,网上的那种方法确实可以,不过你设置了
    inverse="true"就不需要写parent.addChild(child); 
    再有,你不包装update的话,自然就可以把儿子加进来,要不你就加多个儿子的参数
    还有<class name="com.bean.teacher" table="teacher" lazy="true"
    dynamic-insert="true" dynamic-update="true" optimistic-lock="version">这样写的话,对象的状态就交给了session管理,不需要load就可以直接更新,也就是说不需要Parent parent = (Parent) session.load(Parent.class, id); Child child = (Child) session.load(Child.class, childId); 
    set完值后,直接调用session.update(parent)就可以拉
      

  2.   

    我现在把程序改成这样可还是不行:
    public class teacherDAOhibernate extends HibernateDaoSupport implements teacherDAO{  public teacherDAOhibernate() {
        super();
      }
      public void updateTeacher(String tid,teacher tea){
                Session session = SessionFactoryUtils.getSession(getSessionFactory(), false);
                try {
                        teacher a=(teacher)session.load(teacher.class,tid);
                         a.setName(tea.getName());
                         a.setSex(tea.getSex());
                         a.setZhiwei(tea.getZhiwei());
                          session.update(a);
                }
            catch (HibernateException ex) {
                throw SessionFactoryUtils.convertHibernateAccessException(ex);
            }           
         }
    }现在用session来进行控制,但是始终还是添加一条数据哟;到底我该怎么修改才能实现更新呢》????
      

  3.   

    晕,用session都不行啊?你在试试
    Session session = SessionFactoryUtils.getSession(getSessionFactory(), false);
        Transaction trans = null;
        try {
          trans = session.beginTransaction();
          teacher a=(teacher)session.load(teacher.class,tid);
          a.setName(tea.getName());
          a.setSex(tea.getSex());
          a.setZhiwei(tea.getZhiwei());
          session.update(a);
          trans.commit();
        }
        catch (HibernateException ex) {
    throw SessionFactoryUtils.convertHibernateAccessException(ex);
    trans.rollback();
        }
        finally {
          session.close();
        }
      

  4.   

    to : loverisyour(我是民工又咋的,不能搞开发啊!) 我照着你的方法加了:
    <class name="com.bean.teacher" table="teacher" lazy="true"
    dynamic-insert="true" dynamic-update="true" optimistic-lock="version">程序改 成这样:
    public class teacherDAOhibernate extends HibernateDaoSupport implements teacherDAO{  public teacherDAOhibernate() {
        super();
      }
      public void updateTeacher(teacher tea){
                Session session = SessionFactoryUtils.getSession(getSessionFactory(), false);
                try {
                        session.update(tea);
                }
            catch (HibernateException ex) {
                throw SessionFactoryUtils.convertHibernateAccessException(ex);
            }           
         }
    }但是始终还是添加一条数据哟;到底我该怎么修改才能实现更新呢》????
      

  5.   

    Transaction 加进去试了没有
      

  6.   

    to : loverisyour(我是民工又咋的,不能搞开发啊!) 可否提供一段代码例子呢???
    我现在正发愁得很!!!!!!!!!!!1
      

  7.   

    [email protected]  MSN
    [email protected]  POPO
    34428546  QQ
    随便你加哪个,我发给你