hibernate关联映射

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

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

hibernate有7种映射关系

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

@Entity
public class Author {
    private int id;
    private String name;

    @Id
    public int getId() {
        return id;
    } 
 ....set(),get()方法  

@Entity
public 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,则关联
由对方控制。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值