【学习笔记】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 ...
随机推荐
- Node.js进阶:5分钟入门非对称加密方法
前言 刚回答了SegmentFault上一个兄弟提的问题<非对称解密出错>.这个属于Node.js在安全上的应用,遇到同样问题的人应该不少,基于回答的问题,这里简单总结下. 非对称加密的理 ...
- PowerShell 异常处理
在使用 PowerShell 的过程中,发现它的异常处理并不像想象中的那么直观,所以在这里总结一下. Terminating Errors 通过 ThrowTerminatingError 触发的错误 ...
- linux nvme的那些workqueue
目前nvme三个常见的使用的workqueue ,主要有nvme_workq,nvme_rdma_wq ,nvme_fc_wq,下面一一描述一下初始化及使用的场景.分别对应于NVME over PCI ...
- RocketMQ-消费重试机制
介绍: RocketMQ的消息重试及时分为两种,一种是Producer端重试,一种是Consume端重试. 1.Producer端重试 : 1.1消息发没发成功,默认情况下是3次重试. 2.Consu ...
- WebSphere--安装与配置
对于任何软件,都需要一些计划和具体步骤以确保成功安装.对于安装与配制 WebSphere应用服务器及其组件也是如此.下面介绍在Windows NT 上安装与配置WebSphere应用服务器 1 ...
- Netty初探
匠心零度 转载请注明原创出处,谢谢! 说在前面 为什么我们需要学习netty?谈谈自己的看法,由于本人水平有限,如果有那里不对,希望各位大佬积极指出,欢迎在留言区进行评论交流.探讨. 由于移动互联网的 ...
- JAVA中比较两个文件夹不同的方法
JAVA中比较两个文件夹不同的方法,可以通过两步来完成,首先遍历获取到文件夹下的所有文件夹和文件,再通过文件路径和文件的MD5值来判断文件的异同.具体例子如下: public class TestFo ...
- android 中string.xml中的%1$s
idView.setText(getString(R.string.estate_id, mCollectParamObj.getPlotNo())); estate_id:小区号%1$s %d ...
- WMS—启动过程
基于Android 6.0源码, 分析WMS的启动过程. 一. 概述 Surface:代表画布 WMS: 添加window的过程主要功能是添加Surface,管理所有的Surface布局,以及Z轴排序 ...
- matlab文件读写处理实例(二)——textread批量读取文件
问题:对文件夹下所有文件进行批量读取,跳过文件头部分,读取每个文件数据部分的7,8,9列,保存到变量并且输出到文件. 数据: 文件夹11m\