Hibernate框架-多对一和一对多关联

不管是双向还是单向关联,数据库表的设计是一样的,一般都是在N的一方增加外键(如果在1的一方增加外键势必会造成冗余)

单向N-1关联

以Group和User为例,一个Group可以有多个User,一个User只能对应一个Group,典型的一对多(多对一)的案列
这里写图片描述

Annotation方式

对于N-1关联(无论单向还是双向),都需要在N的一方给关联属性加上@ManyToOne注解
@ManyToOne注解有以下属性:

属性 是否必需 说明
cascade 指定Hibernate对关联实体采用的级联策略
fetch 指定抓取关联实体时的抓取策略,该属性值有FetchTyoe.LAZYFetchType.EAGER(@ManyToOne注解的默认值),LAZY是指真正用到关联实体才会去数据库获取
optional 该属性指定关联关系是否可选
targetEntity 该属性指定关联实体的类名,默认情况下,Hibernate将通过反射来判断关联实体的类名



User实体:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="t_user")
public class User {
   

    private int id;
    private String name;
    private Group group;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    @Column(length=50)
    public String getName() {
        return name;
    }

    //关联实体属性加上@ManyToOne注解
    @ManyToOne
    //指定映射的外键字段
    @JoinColumn(
            name="group_id", 
            referencedColumnName="id",
            unique=false
    )
    public Group getGroup() {
        return group;
    }

    public void setGroup(Group group) {
        this.group = group;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Group实体:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="t_group")
public class Group {
   

    private int id;
    private String name;
    private String description;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    @Column(length=50)
    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

控制台输出的建表语句:
这里写图片描述

XML方式

user.hbm.xml文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-ma
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值