Hibernate处理一对多关系的三种办法

本文介绍在数据库设计中实现多对一单向关系的方法,包括使用@ManyToOne和@JoinColumn注解,以及通过@JoinTable定义关联表等方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


多对一单向(数据库设计,多在在多方设计外键)

     数据库设计:主键列不可分,联合主键不可有部分依赖,不能存在传递依赖

     注解中在多方的类中加入一个"一方"的类,然后在方法之上加上@ManyToOne

     XML中在多方的XML中设置<many-to-one name="一方的字段名" column="具体的外键名字">

 

 

注:在数据库中要生成的表要改名字,可以用@Table(name="")

第一种方法(一共会生成三张表,两张实体表,一张关系表)

            多端:(生成一张表,存在一个外键comp_id

@Entity()

public class Flight implements Serializable {

    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )

    @JoinColumn(name="COMP_ID")

    public Company getCompany() {

        return company;

    }

    ...

}

        一端:

@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)

   publicSet<Student> getStudent() {

      returnstudent;

   }

   publicvoidsetStudent(Set<Student> student) {

      this.student= student;

   }

第二种方法:(效果同第一种一样)

@Entity()

public class Flight implements Serializable {

    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, targetEntity=CompanyImpl.class )

    @JoinColumn(name="COMP_ID")

    public Company getCompany() {

        return company;

    }

    ...

}

 

public interface Company {

    ...

第三种方法

@Entity()

public class Flight implements Serializable {

    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )

    @JoinTable(name="Flight_Company",

        joinColumns = @JoinColumn(name="FLIGHT_ID"),

        inverseJoinColumns = @JoinColumn(name="COMP_ID")

    )

    public Company getCompany() {

        return company;

    }

    ...

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值