`

Hibernate的update

 
阅读更多

1.用来更新detached对象,更新完后转为persistent状态

Session session = sf.getCurrentSession();
Transaction t = session.beginTransaction();
Teacher teacher = (Teacher) session.get(Teacher.class, 1);
t.commit();

teacher.setName("张三");

Session session2 = sf.getCurrentSession();
Transaction t2 = session2.beginTransaction();
session2.update(teacher);
t2.commit();

 

2.更新有或者没有idtransient对象不会报错(不管这个id在数据库中有没有对应的数据)

Teacher teacher = new Teacher();
teacher.setId(1);
teacher.setName("张三");

Session session = sf.getCurrentSession();
Transaction t = session.beginTransaction();
session.update(teacher);
t.commit();

 

注:更新有idtransient对象(在数据库中有对应的数据),除了设置的成员变量外,其他的都是空值。

3.更新部分字段:

1)XML设定property标签的update属性为trueannotation设定@Columnupdatable属性为true(不灵活,很少用)

2)使用XML中的dynamic-updateJPA annotation没有对应的属性(同一个session可以,跨session不行,不过可以用marge)

 

Session session = sf.getCurrentSession();
Transaction t = session.beginTransaction();
Student student = (Student) session.get(Student.class, 1);
student.setName("张三");
t.commit();

 

Session session = sf.getCurrentSession();
Transaction t = session.beginTransaction();
Student student = (Student) session.get(Student.class, 1);
student.setName("张三");
t.commit();

student.setName("李四");

Session session2 = sf.getCurrentSession();
Transaction t2 = session2.beginTransaction();
session2.update(student);//session2.merge(student);
t2.commit();

 

注:merge这里执行时,会再次执行sql查询语句,然后更新

3)使用HQL语句进行更新

Session session = sf.getCurrentSession();
Transaction t = session.beginTransaction();
Query q = session.createQuery("update Student s set s.name='张三' where id = 1");
q.executeUpdate();
t.commit();

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics