Save方法
1.保存多的一方,会自动把关联表(一的一方)保存。
public void testSaveUser(){
User u = new User();
u.setName("u1");
Group g = new Group();
g.setName("g1");
u.setGroup(g);
User u2 = new User();
u2.setName("u2");
u2.setGroup(g);
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(u);
session.save(u2);
session.getTransaction().commit();
}
2.保存一的一方
单向时只需要在主导一方(即多的一方)设置cascade的值为All
@ManyToOne(cascade=(CascadeType.ALL)
)
public Group getGroup() {
return group;
}
public void testSaveGroup(){
User u1 = new User();
u1.setName("u1");
User u2 = new User();
u2.setName("u2");
Group g = new Group();
g.setName("g1");
g.getUsers().add(u1);
g.getUsers().add(u2);
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(g);
session.getTransaction().commit();
}
如果是一对多双向,不仅需要在不是主导一方(即一的一方)设置cascade的值,还需要再代码中手动添加多的一方保存一的一方的代码
public void testSaveUser(){
User u = new User();
u.setName("u1");
Group g = new Group();
g.setName("g1");
u.setGroup(g);
User u2 = new User();
u2.setName("u2");
u2.setGroup(g);
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(u);
session.save(u2);
session.getTransaction().commit();
}
Update方法
public void testUpdateUser(){
testSaveUser();
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
User u = (User)session.get(User.class,1);
session.getTransaction().commit();
u.setName("zhuangsan");
u.getGroup().setName("group");
Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.update(u);
session2.getTransaction().commit();
}
Delete方法
要想有关联关系,先设定关联关系为null,再删除对应的记录,如果不删除记录,该记录就会变成垃圾数据,或者使用EJBQL。
方法 一
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
//设置cascade的值为all,先查询是否有这一条主键为1记录,然后再删除
User u = session.load(User.class, 1);
u.setGroup(null);
session.delete(u);
session.getTransaction().commit();
方法 二
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.createQuery("delete from User u where u.id= 1 ").executeUpdate();
session.getTransaction().commit();