【学习笔记】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 ...
随机推荐
- JDBC 元数据 (DatabaseMetaData,ResultSetMetaData )
Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信息.根 ...
- hash类型
redis的hash是一个string的key与value的映射表.适合存储对象,与string的类型相比,可以节省内存,并且方便获取整个对象 hset 设置hash field的指定值.不存在则先 ...
- 谈Ajax的Get和Post的区别
Get方式: 用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照URL参数的格式附加在请求行 ...
- Web Magic设计思想
1.1 设计思想 1. 一个框架,一个领域 一个好的框架必然凝聚了领域知识.WebMagic的设计参考了业界最优秀的爬虫Scrapy,而实现则应用了HttpClient.Jsoup等Java世界最成熟 ...
- junit4X系列源码--Junit4 Runner以及test case执行顺序和源代码理解
原文出处:http://www.cnblogs.com/caoyuanzhanlang/p/3534846.html.感谢作者的无私分享. 前一篇文章我们总体介绍了Junit4的用法以及一些简单的测试 ...
- junit4X系列--Rule
原文出处:http://www.blogjava.net/DLevin/archive/2012/05/12/377955.html.感谢作者的无私分享. 初次用文字的方式记录读源码的过程,不知道怎么 ...
- linkin大话面向对象--包装类
Java提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型,那么我们怎么能把基本数据类型称为对象呢? 基本数据类型 包装类 byte Byte short Short int Int ...
- wer
概述 快速入门流程: 使用叮当扫码产品请遵循以下操作步骤: 1. 新建项目信息 2. 新建产品信息 3. 添加发货产品 4. 发货 5. 收货 (具体使用操作请查看详细的使用说明) 文档目的: 本文档 ...
- [DeeplearningAI笔记]神经网络与深度学习4.深度神经网络
觉得有用的话,欢迎一起讨论相互学习~Follow Me 4.2 深层神经网络中的前向传播 4.3 核对矩阵的维数 经验方法论 对于神经网络想增加得到没有bug的程序的概率的方法:需要仔细的思考矩阵的维 ...
- JAVA中的数据存储空间简述
在 JAVA 中,有六个不同的地方可以存储数据: 1. 寄存器( register ): 最快的存储区,因为它位于不同于其他存储区——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进 ...