【学习笔记】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 ...
随机推荐
- ios VS android
本来是学习IOS的,但是最近接到的是有关于安卓的项目,害怕弄混,所以在这个技术博客里写一下对比. IOS ...
- "Cache-control”常见的取值private、no-cache、max-age、must-revalidate及其用意
http://www.cnblogs.com/kaima/archive/2009/10/13/1582337.html 网页的缓存是由HTTP消息头中的"Cache-control&quo ...
- SpringMvc4.x---快捷的ViewController
@RequestMapping("/index") public String hello(){ return "index"; } 此处无任何的业务处理,只是 ...
- mysql 查看索引使用情况
show status like 'Handler_read%'; Handler_read_key 代表着一个行被索引值读取的次数,值很低表明索引不经常用到,增加索引对性能改善不高. Handle ...
- Steeze框架之入门使用
一.介绍 steeze是一个优雅.简洁而又高效的PHP开源框架,在整合了知名框架ThinkPHP和Laravel优点的同时,重写了底层架构,增强了功能实现.支持swoole模型运行,支持容器.模型.依 ...
- background:url() 背景图不显示
奇怪的问题: .box-3 { width: 100%; height: 500px; border: solid 2px red; margin-top: 70px; padding: 0 0 0 ...
- python_如何定义装饰器类?
案例: 实现一个能将函数调用信息记录到日志的装饰器 需求: 把每次函数的调用时间,执行时间,调用次数写入日志 可以对被装饰函数分组,调用信息记录到不同日志 动态修改参数,比如日志格式 动态打开关闭日志 ...
- windows 查看端口被哪个程序占用
比如查看端口8080 1. 查看占用端口8080对应的PID,输入命令:netstat -aon|findstr "8080" (加入查到pid为111222) 2. 继续输入ta ...
- maven(项目管理工具系列 maven 总结二)
♣maven是什么? ♣maven下载.安装 ♣了解maven仓库 ♣eclipse配置maven ♣创建maven项目 ♣把maven项目转化为web项目 1.maven是什么? Maven是一个项 ...
- java 获取ip地址和网络接口
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...