Hibernate 4.3 注解映射

本文详细介绍了使用ORM技术进行数据库表之间的一对一、一对多及多对多关联映射的方法,包括主键关联、关联表关联等不同场景下的具体实现。

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

1.一对一主键关联注解


/**
 * 主键关联两个1-1的表
 */
@Entity
@Table(name = "one_2_one_master")
public class One2OnePKMaster {
    @Id
    @Column(name = "master_id")
    @GenericGenerator(name = "uuid", strategy = "uuid")
    @GeneratedValue(generator = "uuid")
    private String masterId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "master_id") //
    private One2OnePKSilver silver;

    public String getMasterId() {
        return masterId;
    }

    public void setMasterId(String masterId) {
        this.masterId = masterId;
    }

    public One2OnePKSilver getSilver() {
        return silver;
    }

    public void setSilver(One2OnePKSilver silver) {
        this.silver = silver;
    }
}


@Entity
@Table(name = "one_2_one_silver")
public class One2OnePKSilver {
    @Id
    private String masterId;

    @MapsId
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "master_id")
    private One2OnePKMaster master;

    public String getMasterId() {
        return masterId;
    }

    public void setMasterId(String masterId) {
        this.masterId = masterId;
    }

    public One2OnePKMaster getMaster() {
        return master;
    }

    public void setMaster(One2OnePKMaster master) {
        this.master = master;
    }
}


一对多关联注解


@Entity
    @Table(name = "t_company")
    public class Company {


        @Id
        @Column(name = "company_id")
        @GenericGenerator(name = "uuid", strategy = "uuid")
        @GeneratedValue(generator = "uuid")
        private String companyId;

        @Basic
        @Column(name = "name")
        private String name;

        @OneToMany()
        @JoinColumn(name = "company_id")//如果不定义注解,会自动生成关联表,并自动生成关联表中的两个字段名。
        private List<Employee> employeeList;


@Entity
@Table(name = "t_employee")
public class Employee {
    @Id
    @Column(name = "employee_id")
    @GenericGenerator(name = "uuid", strategy = "uuid")
    @GeneratedValue(generator = "uuid")
    private String employeeId;

    @ManyToOne
    @JoinColumn(name = "company_id")//如果不定义注解,会自动生成公司表名+公司表主键名称(company_company_id)
    private Company company;


对多关联注解


@Entity
@Table(name = "t_student")
public class Student {
    @Id
    @Column(name = "student_id")
    @GenericGenerator(name = "uuid", strategy = "uuid")
    @GeneratedValue(generator = "uuid")
    private String studentId;

    @ManyToMany
    @JoinTable(name = "t_teacher_student_rel",
            inverseJoinColumns = {@JoinColumn(name = "teacher_id", referencedColumnName = "teacher_id")},
            joinColumns= {@JoinColumn(name = "student_id", referencedColumnName ="student_id")})
    private List<Teacher> teacherList;


@Entity
@Table(name = "t_teacher")
public class Teacher {
    @Id
    @Column(name = "teacher_id")
    @GenericGenerator(name = "uuid", strategy = "uuid")
    @GeneratedValue(generator = "uuid")
    private String teacherId;

    @Basic
    @Column(name = "name")
    private String name;

    @ManyToMany()
    @JoinTable(name = "t_teacher_student_rel",
            joinColumns = {@JoinColumn(name = "teacher_id", referencedColumnName = "teacher_id")},
            inverseJoinColumns = {@JoinColumn(name = "student_id", referencedColumnName ="student_id")})
    private List<Student> studentList;


一对多关联表关联注解


@Entity
@Table(name = "v_shop")
public class Shop {
    @Id
    @Column(name = "shop_id")
    @GenericGenerator(name = "uuid", strategy = "uuid")
    @GeneratedValue(generator = "uuid")
    private String shopId;

    @Basic
    @Column(name = "name")
    private String name;

    @OneToMany()
    private List<Book> bookList;

@Entity
@Table(name = "v_book")
public class Book {
    @Id
    @Column(name = "book_id")
    @GenericGenerator(name = "uuid", strategy = "uuid")
    @GeneratedValue(generator = "uuid")
    private String bookId;

    @ManyToOne
    @JoinTable(name = "v_shop_book_rel",
            joinColumns = @JoinColumn(name = "book_id", referencedColumnName = "book_id"),
            inverseJoinColumns = @JoinColumn(name = "shop_id", referencedColumnName = "shop_id"))
    private Shop shop;



一对一关联表关联注解


@Entity
@Table(name = "x_computer")
public class Computer {

    @Id
    @Column(name = "computer_id")
    @GenericGenerator(name = "uuid", strategy = "uuid")
    @GeneratedValue(generator = "uuid")
    private String computerId;

    @OneToOne
    @JoinTable(name = "x_computer_cpu_rel",
            inverseJoinColumns= @JoinColumn(name = "cpu_id", referencedColumnName = "cpu_id"),
            joinColumns = @JoinColumn(name = "computer_id", referencedColumnName = "computer_id"))
    private Cpu cpu;


@Entity
@Table(name = "x_cpu")
public class Cpu {

    @Id
    @Column(name = "cpu_id")
    @GenericGenerator(name = "uuid",strategy = "uuid")
    @GeneratedValue(generator = "uuid")
    private String cpuId;

    @OneToOne//(cascade = CascadeType.ALL)
    @JoinTable(name = "x_computer_cpu_rel",
            joinColumns = @JoinColumn(name = "cpu_id", referencedColumnName = "cpu_id"),
            inverseJoinColumns = @JoinColumn(name = "computer_id", referencedColumnName = "computer_id"))
    private Computer computer;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值