hibernate关联映射

来源:互联网 发布:淘宝网络推广公司排名 编辑:程序博客网 时间:2024/05/21 22:46

hibernate实现ORM(对象关系映射)

hibernate基本文件(xml非注解)
1)*.java映射类
2)*.hbm.xml 映射文件
3).cfg.xml数据库配置文件(+驱动加载.properties文件)*

hibernate有7种映射关系

(1)单向一对一
1)Annotation方法
exp:

@Entitypublic class Author {    private int id;    private String name;    @Id    public int getId() {        return id;    }  ....set(),get()方法  @Entitypublic class Books {    private int id;    private String bookname;    private Author author;    @Id    public int getId() {        return id;    }    ....    @OneToOne    public String getAuthor(){        return author;    }   

2)xml方法
采用的标签映射,并指定unique为true,限制多的一端唯一

(2)单向多对一
1)Annotation方法
雷同单向一对一,在多的一端注解@ManyToOne
2)xml方法

 <many-to-one name="group" column="groupid"/> 

(3)单向一对多
1)Annotation方法

 @Entity@Table(name="Group_table")public class Group {    private int id;    private String GroupName;    private Set<User> users = new HashSet<User>();    @Id    public int getId() {        return id;    }    ...    @OneToMany    public Set<User> getUsers() {        return users;    }@Entity@Table(name = "user_table")public class User {    private int id;    private String name;    @Id    public int getId() {        return id;    }       ...

2)xml方法

  <set name="User">        <key column="GroupId"/>        <one-to-many class="csc.hfz.Model.User"/>  </set>

注:单向一对多,在多的一方前提是不知道一端是哪个,维护与Group关系Groupid为NULL

(4)单向的多对多
单向多对多就需要第三张表的建立关系
1)Annotation方法
参考单向一对多关联,不多介绍
2)xml方法,User边添加

<set name="teacher" table="t_user_Group">       <key column="user_id"/>       <many-to-many class="csc.hfz.Model.Group" column="Group_id"/>  </set>  

(5)双向一对一
1)Annotation方法
exp:

 @Entity@Table(name="User_T")public class User {    private int id;    private String name;    private Group group;    @OneToOne    @JoinColumn(name="group_id",unique=true) //name自定义关联外键的列名    public Group getGroup() {        return group;    }    @Id    public int getId() {        return id;    }    ...    @Entity@Table(name="Group_T")public class Group {    private int id;    private String GroupName;    private User user;    public String getGroupName() {        return GroupName;    }    @Id    public int getId() {        return id;    }    @OneToOne(mappedBy="group")     //mappedBy是指定User中的group作为关联外键,否则User和group都会出现外键    public User getUser() {        return user;    }    ...

注意:此处的group指的是与User中getGroup的group对应
2)xml方法

 <one-to-one name="user"property-ref="group"/>  

注意:一对一唯一外键关联双向采用标签映射,必须指定标签中的property-ref属性为关系字段的名称

(6)双向多对多
1)Annotation方法
2)xml方法,Student边添加(设2个类为Student,Teacher)

 <set name="teacher" table="t_Student_Teacher">       <key column="Student_id"/>       <many-to-many class="csc.hfz.Model.Teacher" column="Teacher_id"/>   </set>  

Teacher边添加

<set name="Student" table="t_Student_Teacher">       <key column="Teacher_id"/>       <many-to-many class="csc.hfz.Model.Student" column="Student_id"/>   </set>  

**注意:

  1. 生成的中间表名称必须一样
  2. 生成的中间表中的字段必须一样

**

(7)双向一对多
1)Annotation方法
一对多双向关联的映射方式:

  • 在一的一端的集合上采用标签,在多的一端加入一个外键

  • 在多的一端采用标签

    2)xml方法,Student边添加(设2个类为Student,Teacher)

Group添加:

<set name="students"inverse="true">         <key column="groupid"/>        <one-to-many class="csc.hfz.Model.Student"/>  </set>

Student:

<many-to-one name="group" column="studentid"/> 

**注意:inverse属性…..:
inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联
由对方控制。
**

祝2017新年快乐!

1 0
原创粉丝点击