Hibernate关联关系配置

Hibernate关联关系配置

  1. 一对一单向外键关联
    举例:比如丈夫和妻子的关系为一对一关系
    妻子:编号,姓名
    丈夫:编号,姓名,引用妻子对象
    Annotation配置:在husband类中

    private Wife wife;
    @OneToOne
    @JoinColumn(name="wifeId")
    public Wife getWife(){
        returen wife;
    }

    说明:husband表中默认生成wife_id,使用@JoinColumn可以自定义列名字
    XML配置:在husband的映射关系配置文件中,采用many-to-one+unique的方式

    <many-to-one name="wife" column="wifeId" unique="true"></many-to-one>
  2. 一对一双向外键关联
    妻子:编号,姓名,引用丈夫对象
    丈夫:编号,姓名,引用妻子对象
    Annotation配置:husband类中的配置不变,在wife类中配置如下

    private Husband husband;
    @OneToOne(mappedBy="wife")
    public Husband getHusband(){
        return husband;
    }

    说明:mappedBy是将映射关系交于husband类中的wife属性来处理,生成的wife表中将不存在husband_id字段
    XML配置:husband的配置不变,在wife的映射关系配置文件中

    <one-to-one name="husbandId" property-ref="wife"></one-to-one>

    说明:property-ref是将其交由husband类中的wife属性处理

  3. 多对一单向关联
    举例:用户和用户组是多对一的关系
    用户:编号,姓名,用户组的引用
    用户组:编号,组名
    Annotation配置:在User类中

    private Group group;
    @ManyToOne
    public Group getGroup(){
        return group;
    }

    XML配置:在User的映射文件中

    <many-to-one name="group" column="groupId"/>
  4. 一对多单向关联
    用户组:编号,组名,用户的set集合
    用户:编号,姓名
    Annotation配置:

    private Set<User> users = new HashSet<User>();
    @OneToMany
    @JoinColumn(name="groupId")
    public Set<User> getUsers(){
        return users;
    }

    说明:加入名为groupId的外键,否则会生成另一张中间表
    XML配置:在用户组的配置文件中

    <set name="users">
        <key column="groupId"><key/>
        <one-to-many class="User类全路径"/>
    </set>
  5. 一对多/多对一双向关联
    用户组:编号,组名,用户的set集合
    用户:编号,姓名,用户组的引用
    Annotation配置:
    多方,User类中getGroup方法上加注解@ManyToOne
    一方,Group类中getUsers方法上加注解@OneToMany(mappedBy=”group”)
    XML配置:即多对一单向和一对多单向的xml配置的合并,注意外键名groupId要一致

  6. 多对多单向关联
    举例:老师和学生的关系为多对多
    老师:编号,姓名,学生集合
    学生:编号,姓名
    Annotation配置:在老师类中

    private Set<Student> stus = new HashSet<Student>();
    @ManyToMany
    @JoinTable(name="t_s",
    joinColumns={@JoinColumn(name="teacher_id")},
    inverseJoinColumns={@JoinColumn(name="student_id")}
    )
    public Set<Student> getStus(){
        return stus;
    }

    说明:t_s定义中间表名,joinColumn定义中间表中参考teacher表主键的名字,inverseJoinColumns定义中间表中参考student表主键的名字
    XML配置:在teacher的配置文件中

    <set name="stus" table="t_s">
        <key column="teacher_id"></key>
        <many-to-many class="Student全路径" column="student_id"/>
    </set>
  7. 多对多双向关联
    老师:编号,姓名,学生集合
    学生:编号,姓名,老师集合
    Annotation配置,多对多单向关联的基础上,在Student类中:

    private set<Teacher> teas = new HashSet<Teacher>();
    @ManyToMany(mappedBy="stus")
    public Set<Teacher> getTeas(){
        return teas;
    }

    XML配置:在Student的配置文件中

    <set name="teas" table="t_s">
        <key column="student_id"></key>
        <many-to-many class="Teacher全路径" column="teacher_id"/>
    </set>

    注:一对一的关联关系中还包含主键关联,但是此情况基本不用,所以本文省略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值