Hibernate5笔记9--Hibernate注解式开发
Hibernate注解式开发:
(1)注解式开发的注意点:
Hibernate中使用注解,主要是为了替代映射文件,完成“类到表,属性到字段”的映射。
JPA提供了一套功能强大的注解。Hibernate直接使用了JPA的这套注解。当然,对于JPA中的一些不足,Hibernate又开发了一些自己的注解。这些注解要么继承自JPA,要么是独立的注解,作为JPA的补充。
故,我们使用的注解,基本是javax.persistence.Transient包中的。 使用注解时需注意以下几点:
(1)使用的均为javax.persistence.Transient包中的注解
(2)不再需要映射文件了
(3)在Hibernate主配置文件中无需指定映射文件了,但需要指定注解的实体类。
(2)示例一(基本注解):
@Entity //表明当前类为实体类
@Table(name="t_student") //可以省略
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY) //表明主键值由数据库自己来维护
private Integer id;
@Basic //表明当前属性将被持久化导数据库中,该注解为属性的默认注解,可以省略
@Column(name="tname")
private String name;
@Basic //表明当前属性将被持久化导数据库中,该注解为属性的默认注解
@Column(name="tage")
private int age;
@Transient //表明当前属性将不写到数据库中
private double score;
示例二(使用Hibernate内置主键生成策略):
@Entity
public class Student {
@Id
@GeneratedValue(generator="xxx") //使用自己定义的主键生成器
@GenericGenerator(name="xxx", strategy="native") //生成一个主键生成器,目的是为了使用Hibernate自带的主键生成策略
private Integer id;
private String name;
private int age;
@Transient //表明当前属性将不写到数据库中
private double score;
示例三(一对多双向关联,并且一方放弃关联关系维护权):
@Entity
public class Country {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer cid;
private String cname; //mappedBy="country" 表示一方放弃维护权,并将维护权交给了对方的关联属性country
@OneToMany(targetEntity=Minister.class, cascade=CascadeType.ALL, mappedBy="country") //targetEntity可以省略
//一旦一方放弃了维护权,则@JoinColumn注解将不能使用
//@JoinColumn(name="countryId")
private Set<Minister> ministers;
@Entity
public class Minister {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer mid;
private String mname; @ManyToOne(targetEntity=Country.class, cascade=CascadeType.ALL) //注意:这里只能使用ALL,因为注解是JPA的注解,如果不用ALL,就对Hibernate的代码不起作用
@JoinColumn(name="countryId")
private Country country; //关联属性
示例四(自关联):
@Entity
//新闻栏目
public class NewsLabel {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name; //栏目名称
private String content; //栏目内容 @ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="pid")
private NewsLabel parentNewsLabel; //父栏目 @OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="pid")
private Set<NewsLabel> childNewsLabels; //子栏目
示例五(多对多双向关联,代码更简单,无需指定中间表,因为底层实现了很多):
@Entity
public class Course {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer cid;
private String cname; //多对多双向关联的注解,要求有一方要放弃维护权。否则,将要生成两张中间表,当然只有一张中间表起作用
@ManyToMany(cascade=CascadeType.ALL, mappedBy="courses")
private Set<Student> students;
@Entity
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer sid;
private String sname; @ManyToMany(cascade=CascadeType.ALL)
private Set<Course> courses;
示例六(二级缓存,Query缓存不能使用注解):
@Entity
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class Country {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer cid;
private String cname; @OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="countryId")
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
private Set<Minister> ministers;
@Entity
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class Minister {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer mid;
private String mname; @ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="countryId")
private Country country; //关联属性
Hibernate5笔记9--Hibernate注解式开发的更多相关文章
- SpringMVC笔记:annotation注解式开发
一.配置式开发 在我们之前的学习中,springmvc使用配置式开发模式,需要在核心配置文件中springmvc.xml注册大量的bean来注入controller控制器,工作繁琐容易出错,下面我们学 ...
- 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错
原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ...
- 总结切面编程AOP的注解式开发和XML式开发
有段日子没有总结东西了,因为最近确实有点忙,一直在忙于hadoop集群的搭建,磕磕碰碰现在勉强算是能呼吸了,因为这都是在自己的PC上,资源确实有点紧张(搭建过程后期奉上),今天难得大家都有空(哈哈哈~ ...
- SpringMVC 注解式开发
SpringMVC的注解式开发是指,处理器是基于注解的类的开发.对于每一个定义的处理器,无需再配置文件中逐个注册,只需在代码中通过对类与方法的注解,便可完成注册.即注解替换是配置文件中对于处理器的注册 ...
- Spring MVC注解式开发
MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册. 只需在代码中通过对类与方法的注解, 即可完成注册. 定义处理器 @Controller: 当前类为处理器 @ ...
- 《SpringMVC从入门到放肆》十一、SpringMVC注解式开发处理器方法返回值
上两篇我们对处理器方法的参数进行了分别讲解,今天来学习处理器方法的返回值. 一.返回ModelAndView 若处理器方法处理完后,需要跳转到其它资源,且又要在跳转资源之间传递数据,此时处理器方法返回 ...
- 《SpringMVC从入门到放肆》九、SpringMVC注解式开发(简单参数接收)
上一篇我们学习了注解式开发的配置方式并写了一个小Demo跑起来.今天我们来学习注解开发的参数接收.处理器方法中的常用参数有五类,这些参数会在系统调用时由系统自动赋值,即程序员可以在方法中直接使用.具体 ...
- 《SpringMVC从入门到放肆》八、SpringMVC注解式开发(基本配置)
上一篇我们结束了配置式开发,配置式开发目前在企业中用的并不是很多,大部分企业都在使用注解式开发,所以今天我们就来学习注解式开发.所谓SpringMVC注解式开发是指,处理器是基于注解的类的开发方式.对 ...
- 3.2.3 SpringMVC注解式开发
SpringMVC注解式开发 1. 搭建环境 (1) 后端控制器无需实现接口 , 添加相应注解 Controller类添加注解 @Controller //该注解表将当前类交给spring容器管理 @ ...
随机推荐
- 解决多进程中APScheduler重复运行的问题
转自:http://blog.csdn.net/raptor/article/details/69218271 问题 在一个Python web应用中需要定时执行一些任务,所以用了APSchedule ...
- filebeat向kafka中传输数据报WARN Failed to connect to broker DOMSDev07:9092: dial tcp: lookup DOMSDev07: getaddrinfow: No such host is known.解决方法
打开filebeat客户端所在机器C:\Windows\System32\drivers\etc目录,找到hosts文件 以记事本形式打开,在底部追加 “IP 主机名” 即可
- 【bzoj5166】[HAOI2014]遥感监测 贪心
题目描述 给出平面上 $n$ 个圆,在x轴上选出尽可能少的点,使得每个圆中至少有一个点.求这个最小点数. 输入 第1行: N R 分别表示激光点的个数和射电望远镜能检测到的半径 第2~N+1行: Xi ...
- 执行SCP命令拷贝文件失败
scp是我最常用的远程文件拷贝工具,今天发现突然不能用了: svan-mac:hive-tools xiean$ scp -Pxx target/urs-hive-tools-jar-with-de ...
- SQLServer 重建索引前后对比 (转)
https://www.cnblogs.com/mingl12/p/5730178.html
- 【刷题】BZOJ 3144 [Hnoi2013]切糕
Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R个P行Q列的矩阵,第z个 矩阵的第x行第y列是v(x, ...
- 【刷题】BZOJ 1061 [Noi2008]志愿者招募
Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完 ...
- SSM的整合
框架的整合: 1. 依赖整合 aop的包: aspectweaver spring-aop spring核心: spring-context spring-web spring-webmvc spri ...
- Eclipse – Java.Lang.OutOfMemoryError: Java Heap Space(转)
In Eclipse IDE, if your program is consuming a lot of memory (loading big data) like this : List< ...
- python图片云
Python 小工具 把图片拼接成任意大小新图片 代码比较简单 看注释就好 # -*- coding:utf-8 -*- #图片拼接 import PIL.Image as Image import ...