您的位置:首页 > 其它

Hibernate学习_015_集合映射

2014-10-01 19:22 302 查看
关于集合映射,在前面我们已经用到了Set类型,这个是我们一般推荐使用的类型,它主要的特征就是集合里面不可以存放相同的元素。

这里我们主要讲解一下List和Map这两种类型。还是拿Goup和User这个一对多的双向来示例。由于只需要在一的一段使用集合,所以这里的User还是和以前一样,没变,变化的只是Group类的注释,而且相对简单,所以这里只给出相关的Group类和相关的测试代码:

List集合

@Entity
@Table(name="t_group")
public class Group {
private int id;
private String name;
private List<User> users = new ArrayList<User>();
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@OneToMany(mappedBy="group",cascade=CascadeType.ALL)
@OrderBy("name ASC")
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
首先,使用@OneToMany声明这是一个一对多的关联映射,由于List有一个很特殊的特点(其中的元素可排序),所以我们使用@OrderBy这个注解说明当我们通过Group对象取出User集合的时候,里面的User对象按照属性name 升序排列。现骨干的测试代码如下:

@Test
public void saveGroupAndUsers(){
Session s = sessionFactory.getCurrentSession();
s.beginTransaction();
Group g = new Group();
g.setName("g1");
User u1 = new User();User u2 = new User();User u3 = new User();
u1.setName("u1");u2.setName("u2");u3.setName("u3");
g.getUsers().add(u1);g.getUsers().add(u3);g.getUsers().add(u2);
u1.setGroup(g);u2.setGroup(g);u3.setGroup(g);
s.save(g);
s.getTransaction().commit();
}
@Test
public void getGroup(){
saveGroupAndUsers();
Session s = sessionFactory.getCurrentSession();
s.beginTransaction();
Group g = (Group)s.get(Group.class, 1);
List<User> list = g.getUsers();
for(User u : list){
System.out.println(u.getName());
}
s.getTransaction().commit();
}
运行以上测试,我们会发现,尽管我们是存入Group.users中的时候,是按照u1,u3,u2的顺序存放的,但是当我们取出数据打印的时候,发现打印顺序是按照u1,u2,u3的顺序打印的。

Map集合

Map集合里面所有元素都是由键值对组成。比较简单,直接给出代码示例:

@Entity
@Table(name="t_group")
public class Group {
private int id;
private String name;
private Map<Integer,User> users = new HashMap<Integer,User>();
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@OneToMany(mappedBy="group" ,cascade=CascadeType.ALL)
@MapKey(name="id")
public Map<Integer, User> getUsers() {
return users;
}
public void setUsers(Map<Integer, User> users) {
this.users = users;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

测试代码如下:

@Test
public void getGroup(){
saveGroupAndUsers();
Session s = sessionFactory.getCurrentSession();
s.beginTransaction();
Group g = (Group)s.get(Group.class, 1);
Map<Integer,User> users = g.getUsers();
for(Map.Entry<Integer, User> entry: users.entrySet()){
System.out.println(entry.getValue().getName());
}
s.getTransaction().commit();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: