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与开源框架中广泛使用,泛型在集合框架中广泛使用 注 ...
随机推荐
- [K/3Cloud] K/3 Cloud1.0怎样和2.0共存在一台服务器上
第一步:安装Cloud1.0,创建管理中心,创建业务数据中心,备份管理数据库和业务数据库,并且备份安装目录: 第二步:卸载Cloud1.0,清理安装目录,安装Cloud2.0,创建管理中心,创建业务数 ...
- Hihocoder 1337 (splay)
Problem 平衡树 SBT 题目大意 维护一个序列,支持两种操作. 操作一:插入一个数. 操作二:询问第k小的数. 解题分析 ~~刷刷水题,再熟悉一下splay的基本操作. ps:哇咔咔,有连续四 ...
- C. Hexadecimal's Numbers
C. Hexadecimal's Numbers time limit per test 1 second memory limit per test 64 megabytes input stand ...
- java包静态导入,继承
/** * 静态导入 */package cn.sxt.gao;import cn.sxt.oo.*;//用别的包的类需要导入别的包,表示该包下所有类全部导入import java.util.Date ...
- Ubuntu 16.04安装indicator-sysmonitor实现导航条显示上下行网速/CPU/内存使用率
安装: sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor sudo apt-get update sudo apt-get in ...
- PayPal加密证书.pem的生成
How do I create a public certificate for use with PayPal Encrypted Website Payments? Before you ca ...
- 1.4-动态路由协议OSPF③
OSPF的路由汇总 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 用默认的网络地址 因为 无论在何种路 ...
- Object-C--->Swift之(十一)属性观察者
属性观察者机制能让程序在属性被赋值时获得运行代码的机会,用来监视属性的除初始化之外的属性值变化,当属性值发生改变时能够对此作出响应 详细包含两个特殊的回调方法: willSet(newValue):被 ...
- linux下uart应用编程
目的:在用户空间通过读写uart设备文件,控制uart串口发送和接收数据. 在用户空间设置uart波特率.奇偶校验使能等操作是通过termios结构体和termios库函数完毕.须要在应用程序中包括t ...
- CAS—改动默认登录页
1. 部署CAS-Server 本文以cas-server-3.4.11-release.zip为例.解压提取cas-server-3.4.11/modules/cas-server-webapp- ...