【极客营】Hibernate JPA注解开发-多表常用注解

作者:何征天

课程视频地址:https://ke.qq.com/course/273907

1.1.  一对多

1.新建订单表实体类,并与客户表建立实体关系。

Customer.java

package cn.igeekdemo2;

 

import java.util.HashSet;

import java.util.Set;

 

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.OneToMany;

import javax.persistence.Table;

 

//实体类

@Entity

//表信息

@Table(name="t_customer")

publicclass Customer {

    @Id

    //主键生成策略

    @GeneratedValue

    private Integer id;

    private String name;

    private String city;

    //一个客户对应多个订单,使用set集合

    //配置一对多注解

    //mappedBy是关联对象Order在自己的实体类中一方的属性(需要在一方配置)

    //order表中的外键名会根据这个值来生成,这里将生成customer_id

    @OneToMany(mappedBy="customer")

    Set<Order> orders = new HashSet<>();

    //省略gettersetter方法

}

Order.java

package cn.igeekdemo2;

 

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.ManyToOne;

import javax.persistence.Table;

 

//实体类

@Entity

//表信息

@Table(name="t_order")

publicclass Order {

    @Id

    @GeneratedValue

    private Integer id;

    private String name;

    private Double price;

    //一个订单对应一个客户

    //配置多对一

    @ManyToOne

    private Customer customer;

    //省略gettersetter方法

}

2.映射文件加入到核心文件hibernate.cfg.xml配置:

<!-- 关联一对多javabean -->

       <mapping class="cn.igeekdemo2.Customer"/>

       <mapping class="cn.igeekdemo2.Order"/>

3.测试TestOne2Many.java

package cn.igeekdemo2;

 

import org.hibernate.Session;

import org.hibernate.Transaction;

import org.junit.Test;

 

import cn.igeekutil.HibernateUtils;

 

publicclass TestOne2Many {

   

    //保存数据

    @Test

    publicvoid run2(){

       Session session = HibernateUtils.getCurrentSession();

       Transaction tr = session.beginTransaction();

       //新建一个客户

       Customer c = new Customer();

       c.setName("美美");

       //新建2个订单

       Order o1 = new Order();

       o1.setName("A字短裙");

      

       Order o2 = new Order();

       o2.setName("清新长裙");

      

       //关联

       o1.setCustomer(c);

       o2.setCustomer(c);

       //保存

       session.save(c);

       session.save(o1);

       session.save(o2);

      

       tr.commit();

    }

   

    @Test

    publicvoid run1(){

       HibernateUtils.getCurrentSession();

    }

}

更多详细配置:

Customer.java

Order.java

1.2.  多对多

示例:学生和课程

1.建立实体类,并加上注解:

Student.java

package cn.igeekdemo2;

 

import java.util.HashSet;

import java.util.Set;

 

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.ManyToMany;

import javax.persistence.Table;

 

@Entity

@Table(name="t_student")

publicclass Student {

    @Id

    @GeneratedValue

    private Integer id;

    private String name;

   

    //多对多set集合

    //配置多对多关系

    @ManyToMany

    private Set<Course> courses = new HashSet<>();

   

    //省略gettersetter方法

}

Course.java

package cn.igeekdemo1;

 

import java.util.HashSet;

import java.util.Set;

 

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.ManyToMany;

import javax.persistence.Table;

 

@Entity

@Table(name="t_course")

publicclass Course {

    @Id

    @GeneratedValue

    private Integer id;

    private String name;

   

    //多对多Set集合

    //配置多对多关系

    @ManyToMany(mappedBy="courses")

    //必须在某一方配置外键关联字段

    //应该配置中间表的信息,如果不配置,默认中间表的名字就是表名1_表名2,字段是各自的:实体类名字_id

    private Set<Student> students = new HashSet<>();

    //省略gettersetter方法

}

2.在核心配置文件中配置映射hibernate.cfg.xml:

<!-- 关联多对多javabean -->

       <mapping class="cn.igeekdemo2.Student"/>

       <mapping class="cn.igeekdemo2.Course"/>

3.新建TestMany2Many类测试

package cn.igeekdemo2;

 

import org.hibernate.Session;

import org.hibernate.Transaction;

import org.junit.Test;

 

import cn.igeekutil.HibernateUtils;

 

publicclass TestMany2Many {

    //保存数据

    @Test

    publicvoid run2(){

       Session session = HibernateUtils.getCurrentSession();

       Transaction tr = session.beginTransaction();

       //1.新建一个学生

       Student s = new Student();

       s.setName("冠希");

       //2.新建一门课程

       Course c = new Course();

       c.setName("java");

       //3.关联

       s.getCourses().add(c);

       c.getStudents().add(s);

       //4.保存

       session.save(s);

       session.save(c);

      

       tr.commit();

    }

   

    @Test

    publicvoid run1(){

       HibernateUtils.getCurrentSession();

    }

}

【更多配置】:






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值