public void updatePersonData(int person_id,PersonData personData){
session=new HibernateUtil().OpenSession();
transaction=session.beginTransaction();
personData.setPerson_id(person_id);
try {
//System.out.println(personData.getPerson_id());
session.update(personData);
transaction.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
transaction.rollback();
}finally{
if(session.isOpen())
session.close();
}
}测试代码:
         @Test
public void test_updatePersonData(){
PersonData pd=new PersonData();
pd.setPerson_sex("男");
pd.setPerson_age(27);
personDatabean.updatePersonData(3, pd);
}如果这样写,update操作是update全部字段,而我的意思是只update我在测试代码中写出的字段,其他字段内容保持不变。该怎么实现呢???

解决方案 »

  1.   

    后来想另一种方法,还是有问题:
    public PersonData selectPersonData(int person_id){
    session=new HibernateUtil().OpenSession();
    transaction=session.beginTransaction();
    PersonData personData=null;
    try {
    ResultSet rs=session.connection().createStatement().executeQuery("select * from taobaomall.person_data where person_id="+person_id);
    personData=(PersonData) rs;
    ResultSetMetaData rsmd=rs.getMetaData();
    while(rs.next()){
    for(int i=1;i<=rsmd.getColumnCount();i++){
    System.out.print(rs.getString(i)+" ");
    }
    System.out.println();
    }
    } catch (HibernateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally{
    if(session.isOpen())
    session.close();
    }
    return personData;
    }修改测试代码:
    @Test
    public void test_updatePersonData(){
    PersonData pd= personDatabean.selectPersonData(3);
    pd.setPerson_sex("男");
    pd.setPerson_age(27);
    personDatabean.updatePersonData(3, pd);
    }但是这样还是报错,请教大家该怎么实现呢???
      

  2.   

    hibernate是根据主键修改对象
    你可以直接调用HibernateDaoSupport的merge方法
    用法如下:
    定义dao类继承HibernateDaoSupport
    方法调用super.getHibernateTemplate().merge(object);
    Entity entity=new Entity();
    entity.setID(1);//设置修改的是哪个对象
    entity.setPerson_sex("男");//后面就是想修改那个字段就设置哪字段的值
    执行merge方法
      

  3.   

    spring还没学过怎么用哦,有没有其他方法啊???
      

  4.   

    先调用方法取出你所需要操作的person_data 对象
    例如测试代码:
      @Test
    public void test_updatePersonData(){
    PersonData pd=personDatabean.selectPersonData(3);//获得对象
    pd.setPK("1");//设置该对象的主键值
    pd.setPerson_sex("男");
    pd.setPerson_age(27);
    //调用修改方法你再试试
      

  5.   

    多谢5楼指点,是应该根据id来update的,应该先取得要update的数据,然后根据取得的id去update某行数据。