在上一次的注解案例里面配置注解的同时,也添加了一对多(@OneToMany)的关系在里面。

本次将补充上次的缺失:其他三种关联方式的配置。

为了简化配置的复杂度   在此案例中Emp和Dept并不是唯一的两个类,其他的我都会在适当的时机点明。

例如配置一对一关联的时候再来使用这两个类就不太合适了  。

@OneToOne的配置    参与的类有Student和Card(学生与身份证是一对一的关系)

  Student

 package cn.happy.entity;

 import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name="Card")
public class IdCard {
@Id
@Column(length=18)
private String cid;
@Column(name="cname")
private String cname;
@OneToOne(mappedBy="craid")
private Student stu;
}

  Card

 package cn.happy.entity;

 import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table; import org.hibernate.annotations.CollectionId;
@Entity
@Table(name="Student")
public class Student {
@Id
@GeneratedValue
private Integer id;
@Column(name="name")
private String name;
@OneToOne(cascade={CascadeType.ALL})
@JoinColumn(name="cid")
private Card card; }

@ManyToOne的配置   Emp和Dept(符合多对一的关系)

  Emp

 @Entity
@Table (name="EMP")
  //注解的命名查询
@NamedQuery(name="selectEmp",query="from Emp e where e.empId>:eno")
public class Emp {
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_gen")
@SequenceGenerator(name="seq_gen",sequenceName="SEQ_Num",allocationSize=1,initialValue=4)
@Column (name="EMPNO")
private Integer empId;
@Column (name="ENAME")
private String empName;
@Column
private String job;
@Column
private String mgr;
@Column
private Date hiredate;
@Column
private Integer sal;
@Column
private Integer comm;
@OneToMany(mappedBy=“emp”) private Dept dept;
}

  Dept

 /**
* 注解1.1
*/
@Entity
@Table(name="DEPT")
public class Dept { /*@Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_gen")
@SequenceGenerator(name="seq_gen",sequenceName="HIBERNATE_SEQUENCE",allocationSize=1,initialValue=4)*/ @Id
//主键生成策略
@GeneratedValue(generator="my_gen")
//自定义主键生成方式:uuid
@GenericGenerator(name="my_gen",strategy="uuid")
private Integer deptNo; @Column(name="DNAME")
private String deptName; @Column(name="LOC")
private String loc; @ManyToOne(fetch=FetchType.LAZY)
     @JoinColumn(name="DEPTNO")
private Set<Emp> emps = new HashSet<Emp>();

@ManyToMany的配置   Emp和Project(符合多对多的关系)

  Project

 /**
* 注解1.1
*/
@Entity
@Table(name="AnProject")
public class Project {
@Id
@GeneratedValue
private Integer pid;
private String pname; @ManyToMany(mappedBy="pros")
private Set<Emp> emp = new HashSet<Emp>();
}

  Emp

 /**
* 注解1.2
*/
@Entity
@Table(name="AnEmp")
public class Emp {
@Id
@GeneratedValue
private Integer empId; private String empName; @ManyToMany(cascade=CascadeType.ALL)
//指定两表相关联的中间表 只有两列(eid,pid)
@JoinTable(
name="AnnoEmpPro",
joinColumns=@JoinColumn(name="eid"),
inverseJoinColumns=@JoinColumn(name="pid")
)
private Set<Project> pros = new HashSet<Project>();
}

  测试  多对多

     @Test
public void Test1(){
Session session = HibernateUtils.currentSession();
Transaction tx = session.beginTransaction();
//创建两个员工对象
Emp emp1 = new Emp("zym1");
Emp emp2 = new Emp("zym2"); //创建两个项目对象
Project pro1 = new Project("项目1");
Project pro2 = new Project("项目2");
//1号员工分别参加了 项目1 和项目2
emp1.getPros().add(pro1);
emp1.getPros().add(pro2); //2号员工只参与了项目2
emp2.getPros().add(pro2);
session.save(emp1);
session.save(emp2); tx.commit();
HibernateUtils.closeSession();
}

可以看到 :  分别给emp表添加了2条数据、给project表添加了2条数据、给emppro中间表添加了4条记录

在上面的双向多对多的配置中,我们选择了Emp作为了主表,所以在Emp中设置了cascade级联关系,并设置了两表之间相关联的第三表的表名及列名。

注解的配置及测试信息留笔以待后续关注。

Java_注解之二的更多相关文章

  1. Spring 注解(二)注解工具类 AnnotationUtils 和 AnnotatedElementUtils

    Spring 注解(二)注解工具类 AnnotationUtils 和 AnnotatedElementUtils Spring 系列目录(https://www.cnblogs.com/binary ...

  2. Spring 注解(二)注解工具类

    本文转载自Spring 注解(二)注解工具类 导语 首先回顾一下 AnnotationUtils 和 AnnotatedElementUtils 这两个注解工具类的用法: @Test @GetMapp ...

  3. MVC-Model数据注解(二)-自定义

    由于系统的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解.         自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也 ...

  4. Java_注解_01_注解(Annotation)详解

    一.注解的概念 Annotation(注解)是插入代码中的元数据(元数据从metadata一词译来,就是“描述数据的数据”的意思),在JDK5.0及以后版本引入.它可以在编译期使用预编译工具进行处理, ...

  5. Java_注解_异常_01_ElementType cannot be resolved to a variable

    一.异常现象: 自定义注解时, @Retention和@Target都能导入进来,但是却报下列错误: RetentionPolicy cannot be resolved to a variable ...

  6. SpringMVC注解汇总(二)-请求映射规则

    接上一节SpringMVC注解汇总-定义 讲到Httpy请求信息 URL路径映射 1)普通URL路径映射 @RequestMapping(value={"/test1", &quo ...

  7. java注解之二

    从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用Annotation,开发人员可 ...

  8. Java注解(二):实战 - 直接使用对象列表生成报表

    通过对Java注解(一):介绍,思想及优点学习了解,相信大家对Java注解有一定程度的了解,本篇文章将实战项目中的应用来加深对Java注解的了解. 本实例实现根据指定字段的JavaBean,生成对应列 ...

  9. java_注解

    注解1    注解的概念    jdk自带的注解    声明与使用注解的基本语法        注解的概念        在javaEE与开源框架中广泛使用,泛型在集合框架中广泛使用        注 ...

随机推荐

  1. vue.js中的路由vue-router2.0使用

    在我们平时工作中,我们有时候会有需求,按照不同的规则,加载不同的组件,页面不去跳转,常见的操作是ajax的异步操作,实现局部刷新加载新数据 在vue中,我们写了很多不同的组件,这时候,实现不刷新调用新 ...

  2. codevs1127 接水问题

    题目描述 Description 学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1. 现在有n 名同学准备接水,他们的初始接水顺序已经确定.将这些同学按接 ...

  3. Java面试常被问到的题目+解答

    第一,anonymousinnerclass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 不行,对于匿名内部类,看到的一句话说的 ...

  4. poj 3074

    题意:解数独 分析: 完整的数独有四个充要条件: 1.每个格子都有填数字 2.每列都有1~9中的每个数字 3.每行都有1~9中的每个数字 4.每个9宫格都有1~9中的每个数字 可以转化成精确覆盖问题. ...

  5. N - Is It A Tree? 并查集

    A tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one ...

  6. RAR5格式不同词典大小下压缩率的简单测试

    一个VMWare虚拟机安装Win7后的磁盘文件进行压缩,已经进行了清理处理,原始大小为12.1GB 词典大小  压缩后大小  压缩比率 32MB 4.08GB 33.7% 256MB 3.88GB 3 ...

  7. fast recovery area

    First of all, the version of my enviroment is Oracle 11.0.2.3. The fast recovery area used to be cal ...

  8. event loop js事件循环 microtask macrotask

    转: 原文 http://blog.csdn.net/sjn0503/article/details/76087631 ---------------------------------------- ...

  9. golang 中timer,ticker 的使用

    写一个程序, 5s, 10s后能定时执行一个任务,同时能不停的处理来的消息. ------------------------------------------------------------- ...

  10. 【翻译自mos文章】OGG replicat 进程使用的 TCP port

    OGG replicat 进程使用的 TCP port 来源于: TCP PORT USED BY REPLICAT PROCESSES (文档 ID 1060954.1) 适用于: Oracle G ...