(8)集合映射:list(@OrderBy)、map(@MapKey、map遍历方法)

来源:互联网 发布:c语言数组循环左移 编辑:程序博客网 时间:2024/06/16 10:28

通常情况下在一对多中用set即可,但是也可以用list、map

一、list :在Javaee中他是有序表,所以有@OrderBy注解,这个注解的含义是一对多端输出时,可以按照多端某个字段排序输出,建表语句没有任何影响,只是从一端输出多端时,会排序输出,在默认情况下,是按照主键升序输出

Group类

@Entity@Table(name="_Group")public class Group {    private int id;    private String gname;    private List<User> users=new ArrayList<User>();//一般用set,用list可以利用@OrderBy对任意字段进行排序    @Id    @GeneratedValue    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    @OneToMany(mappedBy="group",cascade={CascadeType.ALL})    @OrderBy("name ASC")    /*     * 该注解是对有序列表进行映射,默认情况是对id排序。     */    public List<User> getUsers() {        return users;    }    public void setUsers(List<User> users) {        this.users = users;    }}

User类

@Entity @Table(name="_User")//对表重命名public class User {    private int id;    private String name;    private Group group;    @Id //必须加在getId上面    @GeneratedValue    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    @ManyToOne(cascade={CascadeType.ALL})    /*     *      */    public Group getGroup() {        return group;    }    public void setGroup(Group group) {        this.group = group;    }}

Test
假设存了 u1 u2
则从组端取出的组员姓名依次是u2 u1

@org.junit.Test    public void UserDefaultOrder() {        UserSave();        Session session=sf.getCurrentSession();        session.beginTransaction();        Group g=(Group) session.get(Group.class, 1);        for(int i=0;i<g.getUsers().size();i++){            System.out.println(g.getUsers().get(i).getName());        }        session.getTransaction().commit();    }

二、map:是键值对,所以要有唯一 的键 @MapKey

@Entity@Table(name="_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;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @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;    }}

//User表无变化
首先对高级for循环,来做解释 for(元素类型 元素名:数组(集合名))
g1.getUsers().entrySet() 将map集合中每个元素看成一个对象 , 返回此映射所包含的映射关系的 Set 视图。
public Set

    @org.junit.Test    public void UserDefaultOrder() {        Session session2=sf.getCurrentSession();        session2.beginTransaction();        Group g1=(Group) session2.get(Group.class, 1);        for(Entry<Integer, User> entry:g1.getUsers().entrySet()){            System.out.println(entry.getValue().getName());        }        session2.getTransaction().commit();    }