首页 > 代码库 > Hibernate学习笔记_关系映射_其他

Hibernate学习笔记_关系映射_其他

集合映射(不太重要)

1         Set

2        List (与Set差不多 多个@OrderBy)

    a) @OrderBy     排序

private List<User> users = new ArrayList<User>();        @OneToMany(mappedBy="group",            cascade={CascadeType.ALL}            )    @OrderBy("name ASC")    public List<User> getUsers() {        return users;    }    public void setUsers(List<User> users) {        this.users = users;    }

 

3        Map

    a) @Mapkey

private Map<Integer, User> users = new HashMap<Integer, User>();        @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;    }

 

@Test    public void testLoadGroup() {                        Session s = sessionFactory.getCurrentSession();        s.beginTransaction();        Group g = (Group)s.load(Group.class, 1);        for(Map.Entry<Integer, User> entry : g.getUsers().entrySet()) {            System.out.println(entry.getValue().getName());        }        s.getTransaction().commit();            }

 

 

继承映射(不太重要)

一      三种方式

a)    一张总表SINGLE_TABLE(数据库中生成一张表)

@Entity@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING)@DiscriminatorValue("person")public class Person {    private int id;    private String name;        @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;    }}

 

 

@Entity@DiscriminatorValue("student")public class Student extends Person {        private int score;    public int getScore() {        return score;    }    public void setScore(int score) {        this.score = score;    }    }

 

 

@Entity@DiscriminatorValue("teacher")public class Teacher extends Person {    private String title;    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    }

 

 

  @Test    public void testSave() {        Student s = new Student();        s.setName("s1");        s.setScore(80);        Teacher t = new Teacher();        t.setName("t1");        t.setTitle("中级");                Session session = sessionFactory.openSession();        session.beginTransaction();        session.save(s);        session.save(t);        session.getTransaction().commit();        session.close();    }    @Test    public void testLoad() {                testSave();        Session session = sessionFactory.openSession();        session.beginTransaction();        Student s = (Student)session.load(Student.class, 1);        System.out.println(s.getScore());        Person p = (Person)session.load(Person.class, 2);        System.out.println(p.getName());        session.getTransaction().commit();        session.close();            }

 

 

 

b)    每个类分别一张表TABLE_PER_CLASS

@Entity@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)@TableGenerator(        name="t_gen",        table="t_gen_table",        pkColumnName="t_pk",        valueColumnName="t_value",        pkColumnValue="person_pk",        initialValue=1,        allocationSize=1        )public class Person {    private int id;    private String name;        @Id    @GeneratedValue(generator="t_gen", strategy=GenerationType.TABLE)    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;    }}

 

@Entitypublic class Student extends Person {        private int score;    public int getScore() {        return score;    }    public void setScore(int score) {        this.score = score;    }    }

 

 

@Entitypublic class Teacher extends Person {    private String title;    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    }

 

 

 

c)    每个子类一张表jOINED

 

父类上加注解@Inheritance(strategy=InheritanceType.JOINED)

@Entity@Inheritance(strategy=InheritanceType.JOINED)public class Person {    private int id;    private String name;        @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;    }}

 

 

 

 

 

 

 

 

 

Hibernate学习笔记_关系映射_其他