Hibernate学习_015_集合映射

来源:互联网 发布:做一个淘宝网页多少钱 编辑:程序博客网 时间:2024/05/22 15:21

关于集合映射,在前面我们已经用到了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@GeneratedValuepublic 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 升序排列。现骨干的测试代码如下:

@Testpublic 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();}@Testpublic 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@GeneratedValuepublic 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;}}
测试代码如下:

@Testpublic 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();}

0 0