Java_注解之二
在上一次的注解案例里面配置注解的同时,也添加了一对多(@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_注解之二的更多相关文章
- Spring 注解(二)注解工具类 AnnotationUtils 和 AnnotatedElementUtils
Spring 注解(二)注解工具类 AnnotationUtils 和 AnnotatedElementUtils Spring 系列目录(https://www.cnblogs.com/binary ...
- Spring 注解(二)注解工具类
本文转载自Spring 注解(二)注解工具类 导语 首先回顾一下 AnnotationUtils 和 AnnotatedElementUtils 这两个注解工具类的用法: @Test @GetMapp ...
- MVC-Model数据注解(二)-自定义
由于系统的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解. 自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也 ...
- Java_注解_01_注解(Annotation)详解
一.注解的概念 Annotation(注解)是插入代码中的元数据(元数据从metadata一词译来,就是“描述数据的数据”的意思),在JDK5.0及以后版本引入.它可以在编译期使用预编译工具进行处理, ...
- Java_注解_异常_01_ElementType cannot be resolved to a variable
一.异常现象: 自定义注解时, @Retention和@Target都能导入进来,但是却报下列错误: RetentionPolicy cannot be resolved to a variable ...
- SpringMVC注解汇总(二)-请求映射规则
接上一节SpringMVC注解汇总-定义 讲到Httpy请求信息 URL路径映射 1)普通URL路径映射 @RequestMapping(value={"/test1", &quo ...
- java注解之二
从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用Annotation,开发人员可 ...
- Java注解(二):实战 - 直接使用对象列表生成报表
通过对Java注解(一):介绍,思想及优点学习了解,相信大家对Java注解有一定程度的了解,本篇文章将实战项目中的应用来加深对Java注解的了解. 本实例实现根据指定字段的JavaBean,生成对应列 ...
- java_注解
注解1 注解的概念 jdk自带的注解 声明与使用注解的基本语法 注解的概念 在javaEE与开源框架中广泛使用,泛型在集合框架中广泛使用 注 ...
随机推荐
- BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)
字符串终于告一段落了! 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3993 (luogu) https://www.l ...
- Android layer-list:联合shape(2)
Android layer-list:联合shape(2) 附录文章3简单说明了Android layer-list的用法,现在把Android layer-list联合shape做出一些特殊的 ...
- asp.net mvc 4.0 新特性之移动特性
asp.net mvc 4.0 新特性之移动特性 为不同的客户端提供不同的视图 手动重写 UserAgent,从而强制使用对应的视图 示例1.演示如何为不同的客户端提供不同的视图Global.asax ...
- noip模拟赛 三角形
[问题描述] 平面上有N条直线,用方程Aix + Biy +Ci =0表示.这些直线没有三线共点的.现在要你计算出用这些直线可以构造出多少三角形? 输入: 第1行:一个整数N(1 ≤ N≤ 30000 ...
- HDU1565 方格取数1(构图+网络流最大独立集合)
题目大意:给你一个n*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大. 解题思路:最大点 ...
- 洛谷—— P1657 选书
https://www.luogu.org/problem/show?pid=1657 题目描述 学校放寒假时,信息学奥赛辅导老师有1,2,3……x本书,要分给参加培训的x个人,每人只能选一本书,但是 ...
- canvas裁剪之后的base64转换为上传文件blob对象
function convertBase64UrlToBlob(urlData){ var bytes=window.atob(urlData.split(',')[1]); //去掉url的头,并转 ...
- VCS 一次使用。
One database was down today. So I login the server try to check and fix it. I found the Oracle home ...
- 1.3-动态路由协议EIGRP
EIGRP(Enhanced IGRP) EIGRP的特点: IGRP/EIGRP都是CISCO的私有协议. 1:是唯一的一种LS/DV的混合协议. 2:Rapid convergence EIGRP ...
- 最老程序猿创业开发实训1---Android应用架构之MVC
我们都知道Android中基本组件是Activity,每一个界面都是一个Activity,自从2.3版本号開始.又添加了Fragment组件,提供了适应于各种屏幕方法.可是因为Android系统仅仅是 ...