`
sungang_1120
  • 浏览: 310046 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

hibernate关系映射多表间的CRUD、注解

阅读更多
package com.sg.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="t_group")
public class Group {
private Integer id;
private String descs;

private Set<User> users =  new HashSet<User>();
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDescs() {
return descs;
}
public void setDescs(String descs) {
this.descs = descs;
}
@OneToMany(mappedBy="group",cascade={CascadeType.ALL},fetch=FetchType.EAGER)
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}

}

 

package com.sg.domain;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="t_user")
public class User {
private Integer id;
private String name;
private Group group;
@Id
@GeneratedValue
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="groupId")
public Group getGroup() {
return group;
}

public void setGroup(Group group) {
this.group = group;
}

}

 

package com.sg.hibernate.Test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.sg.domain.Group;
import com.sg.domain.User;

public class TeacherTest {
private static SessionFactory sf = null;
@BeforeClass
public static void beforeClass(){
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
sf =  new AnnotationConfiguration().configure().buildSessionFactory();

}
@AfterClass 
public static void afterClass(){
sf.close();
}
@Test
public void testSaveUser(){
User u = new User();
u.setName("sungang");
Group g = new Group();
g.setDescs("nihao");

u.setGroup(g);

Session session = sf.getCurrentSession();
Transaction tr = session.beginTransaction();
//可以手动添加
//session.save(g);
//也可以靠级联关系
session.save(u);
tr.commit();


}
@Test
public void testSaveGroup(){
User u1 = new User();
u1.setName("u11");
User u2 = new User();
u2.setName("u22");

Group g = new Group();
g.setDescs("group1");
g.getUsers().add(u1);
g.getUsers().add(u2);
//
u1.setGroup(g);
u2.setGroup(g);

Session session = sf.getCurrentSession();
Transaction tr = session.beginTransaction();
//可以手动添加

//session.save(u1);
//session.save(u2);
//也可以靠级联关系
session.save(g);
tr.commit();


}
@Test
public void testGetUser(){
//取多的那一方  默认会把一的一方也取出来 不需要去配置级联关系
/**
*  select
        user0_.id as id2_1_,
        user0_.groupId as groupId2_1_,
        user0_.name as name2_1_,
        group1_.id as id3_0_,
        group1_.descs as descs3_0_ 
    from
        t_user user0_ 
    left outer join
        t_group group1_ 
            on user0_.groupId=group1_.id 
    where
        user0_.id=?
*/
testSaveGroup();
Session session = sf.getCurrentSession();
Transaction tr = session.beginTransaction();
User user = (User)session.get(User.class, 1);

System.out.println(user.getName());
System.out.println(user.getGroup().getId());

tr.commit();
}
@Test
public void testGetGroup(){
testSaveGroup();
//取一的那一方  默认不会把多的一方也取出来  就是有级联关系也不会取出
//要想取出来  需要配置fetch=FetchType.EAGER
/**
* select
        group0_.id as id3_1_,
        group0_.descs as descs3_1_,
        users1_.groupId as groupId3_,
        users1_.id as id3_,
        users1_.id as id2_0_,
        users1_.groupId as groupId2_0_,
        users1_.name as name2_0_ 
    from
        t_group group0_ 
    left outer join
        t_user users1_ 
            on group0_.id=users1_.groupId 
    where
        group0_.id=?
*/
Session session = sf.getCurrentSession();
Transaction tr = session.beginTransaction();
Group g = (Group) session.get(Group.class, 1);
for(User u : g.getUsers()){
System.out.println(u.getName()+"======");
}

}
@Test
public void testUpdateUser(){
//更新多的一方 会相应的可以把一的一方也更新  不需配置级联就可以
testSaveGroup();
Session session = sf.getCurrentSession();
Transaction tr = session.beginTransaction();
User user = (User)session.get(User.class, 1);
user.setName("user");
user.getGroup().setDescs("descs");
session.update(user);
tr.commit();
}
@Test
public void testUpdateUser2(){
//更新多的一方  在游离状态更新   要想更新一的一方  需要配置级联ALL
testSaveGroup();
Session session = sf.getCurrentSession();
Transaction tr = session.beginTransaction();
User user = (User)session.get(User.class, 1);
tr.commit();

user.setName("user1");
user.getGroup().setDescs("descs1");

Session session2 = sf.getCurrentSession();
Transaction tr2 = session2.beginTransaction();
session2.update(user);
tr2.commit();

}
@Test
public void testDeleteUser(){
//
testSaveGroup();
Session session = sf.getCurrentSession();
Transaction tr = session.beginTransaction();
User user = (User)session.load(User.class, 1);
//先结束关联关系
//user.setGroup(null);
//session.delete(user);
//也可以直接hql
session.createQuery("delete User u where u.id=1").executeUpdate();
tr.commit();
}
@Test
public void testDeleteGroup(){
//
testSaveGroup();
Session session = sf.getCurrentSession();
Transaction tr = session.beginTransaction();
Group g = (Group)session.load(Group.class, 1);
//先结束关联关系
//user.setGroup(null);
//session.delete(user);
//也可以直接hql
//session.createQuery("delete User u where u.id=1").executeUpdate();
//取出所有的user  并把之间的关系全部解除
//for(User user : g.getUsers()){
//user.setGroup(null);
//}
session.createQuery("delete Group g where g.id = 1").executeUpdate();
//session.delete(g);
tr.commit();
}
@Test 
public void testExport(){
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
}
}
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics