Hibernate学习_015_集合映射
2014-10-01 19:22
302 查看
关于集合映射,在前面我们已经用到了Set类型,这个是我们一般推荐使用的类型,它主要的特征就是集合里面不可以存放相同的元素。
这里我们主要讲解一下List和Map这两种类型。还是拿Goup和User这个一对多的双向来示例。由于只需要在一的一段使用集合,所以这里的User还是和以前一样,没变,变化的只是Group类的注释,而且相对简单,所以这里只给出相关的Group类和相关的测试代码:
List集合:
Map集合:
Map集合里面所有元素都是由键值对组成。比较简单,直接给出代码示例:
测试代码如下:
这里我们主要讲解一下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(); }
相关文章推荐
- Hibernate学习文档_集合映射
- 【Hibernate学习笔记】映射值类型集合
- Hibernate集合映射学习
- HIbernate学习笔记(七) hibernate中的集合映射和继承映射
- hibernate集合映射学习笔记
- Hibernate4学习总结(4)--注解形式的集合映射,关联关系映射
- Hibernate学习22 -- 关联映射12 -- 集合映射
- Hibernate 学习笔记07 --集合映射_&_继承映射
- 【HIbernate框架学习】:Hibernate集合映射
- hibernate学习12之Collection(集合)映射
- Hibernate学习-6-集合映射保存和集合数据获取案例
- Hibernate4学习总结(2)--配置形式的集合映射,关联关系映射
- Hibernate学习笔记(七)【映射值类型集合】
- Hibernate学习笔记:集合映射之映射Map
- Hibernate学习笔记:集合映射之映射Map
- hibernate集合映射inverse和cascade详解 (转载)
- hibernate参考手册之---集合类(Collections)映射
- Hibernate6 集合映射
- 关于Hibernate集合映射中 bag 的说明
- hibernate集合映射inverse和cascade详解