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)的更多相关文章

  1. springmvc学习笔记(常用注解)

    springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...

  2. 学习笔记_J2EE_SpringMVC_03_注解配置_@RequestMapping用法

    @RequestMappingde的用法 摘要: 主要介绍注解@RequestMapping的用法 一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMappi ...

  3. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  4. Hibernate学习笔记:注解@OneToMany和@ManyToOne的单独使用问题 不成对使用

    以某个实际场景为例,现在两张表:用户表User 订单表Order:很显然用户对订单是一对多的关系.二者注解如下 用户表User @Entity @Table(name="users" ...

  5. SpringBoot学习笔记<二>注解

    此篇为项目作结之笔记,关于注解. 项目启动入口@SpringBootApplication[必选]  @ServletComponentScan[可选] 注解后: Servlet.Filter.Lis ...

  6. springMVC学习笔记(二)-----注解和非注解入门小程序

    最近一直在做一个电商的项目,周末加班,忙的都没有时间更新博客了.终于在上周五上线了,可以轻松几天了.闲话不扯淡了,继续谈谈springMvc的学习. 现在,用到SpringMvc的大部分使用全注解配置 ...

  7. Hibernate学习笔记-Hibernate关系映射

    1. 初识Hibernate——关系映射 http://blog.csdn.net/laner0515/article/details/12905711 2. Hibernate 笔记8 关系映射1( ...

  8. 学习笔记_J2EE_SpringMVC_02_注解配置

    SpringMVC注解配置 1.测试环境: 名称 版本 备注 操作系统 Windows10 专业版1809X64   WEB服务器 Tomcat 8.5 X64   浏览器 Google Chrome ...

  9. MyBatis学习笔记(四) 注解

        使用MyBatis注解开发,可以省去类配置文件,简洁方便.但是比较复杂的SQL和动态SQL还是建议书写类配置文件. 注解还是不推荐使用的.只是了解了解!简单的CRUD可以使用注解.简单写写. ...

  10. Hibernate学习笔记--Hibernate框架错误集合及解决

    错误1:MappingException: Unknown entity解决方案 http://jingyan.baidu.com/article/e75aca8552761b142edac6cf.h ...

随机推荐

  1. 基于 HTML5 WebGL 的 3D 仪表数据监控

    工控仪表重点发展基于现场总线技术的主控系统装置及智能化仪表.特种和专用自动化仪表:全面扩大服务领域,推进仪器仪表系统的数字化.智能化.网络化,完成 自动化仪表从模拟技术向数字技术的转变:推进具有自主版 ...

  2. [知了堂学习笔记]_css3特效第一篇--旋转的背景&翻书效果

    一.html遮盖层与css3的旋转动画 >效果图(加载可能会慢一点儿,请稍等...): >实现思路:在一个大的div中装入一个底层img和顶层的div(里面的内容按照以上图片呈现的样式布局 ...

  3. 如何用vue实现树形菜单?

    在公司培训了2周,布置的作业是从树形,grid分页以及echarts中选一个.由于都不是很熟,就挑了第一个.本来想在网上找找参考,然后模仿着做一个,但是网上的代码多少参差不齐,写到一半没了,所以只要自 ...

  4. Selenium滚动条window.scrollTo和window.scrollBy

    Selenium操作滚动条有两种方法,一种就是window.scrollTo,另一种是window.scrollBy,既然两个都可以用来操作滚动条,那这两个方法有什么区别呢? 1.window.scr ...

  5. Python解析JSON详解

    JSON 函数 使用 JSON 函数需要导入 json 库:import json. 函数  描述 json.dumps  将 Python 对象编码成 JSON 字符串 json.loads  将已 ...

  6. uwsgi wsgi nginx centos7.2部署flask

    请原谅我比较懒,直接粘贴onenote笔记了 方法一测试完成后,建议用方法三:uwsgi,ginx部署

  7. Div+Css画太极图源代码

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>D ...

  8. Prime - 程序员的修养

    求质数算法的N种境界 求质数算法的N种境界[1] - 试除法和初级筛法 过程 尽管题目并没有要我们写一个最优的算法,但是身为一个程序员,优化应该是一种习惯,在编程的过程中,随着思考进行优化. 如果你只 ...

  9. 【分布式】ZooKeeper学习之一:安装及命令行使用

    ZooKeeper学习之一:安装及命令行使用 一直都想着好好学一学分布式系统,但是这拖延症晚期也是没得治了,所以干脆强迫自己来写一个系列博客,从zk的安装使用.客户端调用.涉及到的分布式原理.选举过程 ...

  10. Effective Java 之-----消除过期的对象引用

    public class Stack { private Object[] elements; private int size = 0; private static final int DEFAU ...