【学习笔记】Hibernate 注解 (Y2-1-9)
Hibernate注解
1.什么是注解
在类上或者方法上打上其他类型的类型元数据
@标志
使用过的注解:
@override 方法重写
@Test Junit 单元测试
@Before 单元测试
@After 单元测试
Hibernate中常用的注解
1.@Entity 将一个类声明为持久化类
2.@ID 声明持久化类的标识属性
3.@GeneratedValue 定义标识属性值的生成策略,默认为native
4.@Column 将属性映射到类
5.@Table 持久化类映射指定表
6.@Transient 忽略这些属性
Hibernate中可以使用小配置文件来关联映射,也可以使用注解.
1.一对一关联
一个人Human 有一个身份证号Identity 一个身份证号只属于一个人
实体类如下
@Entity
@Table
public class Human {
private Integer hid;
@Column
private String hname;
private Identity identity; @OneToOne
@JoinColumn(name = "iid")
public Identity getIdentity() {
return identity;
} public void setIdentity(Identity identity) {
this.identity = identity;
} @Id
@GeneratedValue
public Integer getHid() {
return hid;
} public void setHid(Integer hid) {
this.hid = hid;
} public String getHname() {
return hname;
} public void setHname(String hname) {
this.hname = hname;
}
}
@Entity
@Table
public class Identity {
private Integer iid;
private String inum;
private Human human; @OneToOne(mappedBy = "identity", cascade = CascadeType.ALL)
public Human getHuman() {
return human;
} public void setHuman(Human human) {
this.human = human;
} @Id
@GeneratedValue
public Integer getIid() {
return iid;
} public void setIid(Integer iid) {
this.iid = iid;
} public String getInum() {
return inum;
} public void setInum(String inum) {
this.inum = inum;
}
}
测试如下
@Test
public void insert() {
Identity id = new Identity();
id.setInum("1231231212123"); Human human = new Human();
human.setHname("鬼");
human.setIdentity(id); id.setHuman(human);
session.save(human);
session.save(id);
}
2.双向一对多关联
一个部门Dept 有多个员工Emp 一个员工只能属于一个部门
实体类如下
@Entity
@Table(name = "dept3")
public class Dept {
@Id
@GeneratedValue
private Integer deptid;
private String dname;
@OneToMany(mappedBy = "dept", cascade = {CascadeType.ALL})
private Set<Emp> emps = new HashSet<Emp>(); public Integer getDeptid() {
return deptid;
} public void setDeptid(Integer deptid) {
this.deptid = deptid;
} public String getDname() {
return dname;
} public void setDname(String dname) {
this.dname = dname;
} public Set<Emp> getEmps() {
return emps;
} public void setEmps(Set<Emp> emps) {
this.emps = emps;
}
}
@Entity
@Table(name = "Emp3")
public class Emp {
@Id
@GeneratedValue
private Integer eid;
private String ename;
@ManyToOne
@JoinColumn(name = "deptid")
private Dept dept; public Integer getEid() {
return eid;
} public void setEid(Integer eid) {
this.eid = eid;
} public String getEname() {
return ename;
} public void setEname(String ename) {
this.ename = ename;
} public Dept getDept() {
return dept;
} public void setDept(Dept dept) {
this.dept = dept;
}
}
测试如下
@Test
public void insert() {
Dept dept = new Dept();
dept.setDname("鬼畜部"); Emp emp1 = new Emp();
emp1.setEname("天命");
emp1.setDept(dept); Emp emp2 = new Emp();
emp2.setEname("斯沃");
emp2.setDept(dept); Set<Emp> set = new HashSet<Emp>();
set.add(emp1);
set.add(emp2);
dept.setEmps(set); session.save(dept);
}
3.多对多关联
一个玩家Player 可以玩多个游戏Game 一个游戏可以被多个玩家玩
实体类如下
@Entity
@Table
public class Game {
@Id
@GeneratedValue
private Integer gid;
private String gname;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "",
joinColumns = {@JoinColumn(name = "gid")},
inverseJoinColumns = {@JoinColumn(name = "pid")})
private Set<Player> players = new HashSet<Player>(); public Integer getGid() {
return gid;
} public void setGid(Integer gid) {
this.gid = gid;
} public String getGname() {
return gname;
} public void setGname(String gname) {
this.gname = gname;
} public Set<Player> getPlayers() {
return players;
} public void setPlayers(Set<Player> players) {
this.players = players;
}
}
@Entity
@Table
public class Player {
@Id
@GeneratedValue
private Integer pid;
private String pname;
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "players")
private Set<Game> games = new HashSet<Game>(); public Integer getPid() {
return pid;
} public void setPid(Integer pid) {
this.pid = pid;
} public String getPname() {
return pname;
} public void setPname(String pname) {
this.pname = pname;
} public Set<Game> getGames() {
return games;
} public void setGames(Set<Game> games) {
this.games = games;
}
}
测试如下
@Test
public void insert(){
Game g1=new Game();
g1.setGname("我的课堂");
Game g2=new Game();
g2.setGname("感恩的心"); Player p1=new Player();
p1.setPname("Chara");
Player p2=new Player();
p2.setPname("Frisk"); g1.getPlayers().add(p1);
g1.getPlayers().add(p2);
g2.getPlayers().add(p1);
g2.getPlayers().add(p2); session.save(g1);
session.save(g2);
}
【学习笔记】Hibernate 注解 (Y2-1-9)的更多相关文章
- springmvc学习笔记(常用注解)
springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...
- 学习笔记_J2EE_SpringMVC_03_注解配置_@RequestMapping用法
@RequestMappingde的用法 摘要: 主要介绍注解@RequestMapping的用法 一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMappi ...
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
- Hibernate学习笔记:注解@OneToMany和@ManyToOne的单独使用问题 不成对使用
以某个实际场景为例,现在两张表:用户表User 订单表Order:很显然用户对订单是一对多的关系.二者注解如下 用户表User @Entity @Table(name="users" ...
- SpringBoot学习笔记<二>注解
此篇为项目作结之笔记,关于注解. 项目启动入口@SpringBootApplication[必选] @ServletComponentScan[可选] 注解后: Servlet.Filter.Lis ...
- springMVC学习笔记(二)-----注解和非注解入门小程序
最近一直在做一个电商的项目,周末加班,忙的都没有时间更新博客了.终于在上周五上线了,可以轻松几天了.闲话不扯淡了,继续谈谈springMvc的学习. 现在,用到SpringMvc的大部分使用全注解配置 ...
- Hibernate学习笔记-Hibernate关系映射
1. 初识Hibernate——关系映射 http://blog.csdn.net/laner0515/article/details/12905711 2. Hibernate 笔记8 关系映射1( ...
- 学习笔记_J2EE_SpringMVC_02_注解配置
SpringMVC注解配置 1.测试环境: 名称 版本 备注 操作系统 Windows10 专业版1809X64 WEB服务器 Tomcat 8.5 X64 浏览器 Google Chrome ...
- MyBatis学习笔记(四) 注解
使用MyBatis注解开发,可以省去类配置文件,简洁方便.但是比较复杂的SQL和动态SQL还是建议书写类配置文件. 注解还是不推荐使用的.只是了解了解!简单的CRUD可以使用注解.简单写写. ...
- Hibernate学习笔记--Hibernate框架错误集合及解决
错误1:MappingException: Unknown entity解决方案 http://jingyan.baidu.com/article/e75aca8552761b142edac6cf.h ...
随机推荐
- 【开发技术】Get请求和Post请求区别
a.Get请求是通过URL请求来提交表单数据的:Post是通过HTTP中的POST机制将表单中的数据提交到Action所定制的程序,如果有附件需要用Post方式. b.Get适用于传输数据量小于1K数 ...
- CCF系列之数列分段(201509-1)
试题名称: 数列分段 试题编号: 201509-1 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 ...
- 【备忘】MVC5 布署在windows2008 IIS7.5 出现的问题解决
MVC5布署到 windows2008 IIS7.5上,发现打不开(404),估计是URL重定向有问题... 本地开发环境是,win8+vs2013,MVC5是vs2013安装好后自带的... 好像记 ...
- 非线性规划带约束-scipy.optimize.minimize
# coding=utf-8 from scipy import optimize import numpy as np def get(args): a, b, c, d, e, f, g, h = ...
- ECLIPS-S测井系统下的仪器挂接 [CV模块]
常见简写 简写 全拼 含义 CV Calibration and Verification 刻度和校验 CP Primary Calibration 主刻度 VP Primary Verify 主校验 ...
- 无废话XML--XML约束(DTD)
基本术语 一.序言Prolog:包括XML声明(XML Declaration)和文档类型声明(Document Type Declaration). 二.良构(well-formed ...
- Struts2中实现随机验证码
一.创建RandomNum类 1: import java.awt.Color; 2: import java.awt.Font; 3: import java.awt.Graphics; 4: im ...
- Android webView包装WebAPP
前言 Android webView 兼容体验真的差到了极点!! 前一阵子,老板要讲 WebAPP 放到 Android 和 iOS 里面,而我因为以前做过安卓,所以这方面就由我来打包, 原理是很简单 ...
- execl列数据成等差递增递减
如上图若想以10,20,30...这样递增: 1).首先需选中10,20所在的单元格,鼠标移至20所在的单元格右下角 2).此时会出现一个十字"十"符号,点击直向下拖动至某个地方, ...
- Audio Unit 基础
如图所示,所有 iOS 音频技术都是基于 audio units.此处显示的更高级别的技术,如 Media Player,AV Foundation,OpenAL,AudioToolbox,是对 au ...