Hibernate-注解
一, 为啥用注解
Hibernate注解使得原本放在xml文件中的信息直接表现在类中
为什么要用注解呢,因为注解可以简洁快速地在编写代码的同时实现映射关系
注解的好处就是语言简洁,即插即用. 坏处就是和xml相比,分散到各个class文件中,不方便修改.
用注解,需要在hibernate.cfg.xml文件中添加使用了注解的实体类的标签
<mapping class="com.test.pojo.Person"/>
二,有哪些注解,咋用?
1.先看示例代码:
@Entity
@Table(name = "person_")
public class Person {
private int id;
private String name;
private int age; @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Column(name = "age")
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
这是一个简单的使用了注解进行映射的类,可以看到其中的注解所代表的含义.
类注解:
(1)@Entity: 表示这是一个实体类,用于映射一个表
(2)@Table(name="person"): 表示这个类映射的表的名字为person
属性注解:
(1)@Id: 表示这个属性是表中的主键
(2)@GeneratedValue(strategy = GenerationType.IDENTITY)表示主键的自增长方式
strategy 指定生成的策略(JPA定义的),这是一个GenerationType。默认是GenerationType. AUTO
GenerationType.AUTO 主键由程序控制
GenerationType.TABLE 使用一个特定的数据库表格来保存主键
GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型)
GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。(这个值要与generator一起使用)
generator 指定生成主键使用的生成器(可能是orcale中的序列)。
(3)@Column(name="id): 表示这个属性映射到表中的"id"字段
name 可选,列名(默认值是属性名)
unique 可选,是否在该列上设置唯一约束(默认值false)
nullable 可选,是否设置该列的值可以为空(默认值false)
insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)
updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)
columnDefinition 可选,为这个特定列覆盖sql ddl片段(这可能导致无法在不同数据库间移植)
table 可选,定义对应的表(默认为主表)
length 可选,列长度(默认值255)
precision 可选,列十进制精度(decimal precision)(默认值0)
scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)
关系注解:
(1) @ManyToOne: 表示多对一关系, (注解下是一个对象的getter)
@JoinColumn(name="tid") 表示, 这个关系在表中对应的字段为tid
@Entity
@Table(name = "person_")
public class Person {
private int id;
private String name;
private int age;
private Teacher teacher; @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Column(name = "age")
public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @ManyToOne
@JoinColumn(name="tid")
public Teacher getTeacher(){
return teacher;
} public void setTeacher(Teacher teacher){
this.teacher = teacher
}
}
(2)@OneToMany(fetch=FetchType.EAGER): 一对多关系, FetchType表示是否延迟加载 (注解下是一个集合的getter)
@JoinColumn: 表示映射字段
@Entity
@Table(name = "teacher_")
public class Teacher {
private int id;
private String name;
private Set<Person> persons; @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="tid")
public Set<Person> getPersons(){
return persons;
} public void setPersons(Set<Person> persons){
this.persons = persons;
}
}
(3)@ManyToMany: 多对多注解
@JoinTable: 多对多关系映射的表
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER) //表示级联方式和是否延迟加载
@JoinTable( //表示多对多关系的表的映射
name="user_product", //表名
joinColumns=@JoinColumn(name="uid"),
inverseJoinColumns=@JoinColumn(name="pid")
)
public Set<Product> getProducts() {
return products;
}
这两个注解需要在有多对多关系的类的集合的getter中都写上.
Hibernate-注解的更多相关文章
- Hibernate注解----关联映射注解以及课程总结详解----图片版本
上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...
- Hibernate注解----类级别注解以及属性注解详解----图片版本
这篇文章是我在慕课网上学习Hibernate注解的时候进行手机以及整理的笔记. 今天把它分享给大家,希望对大家有用.可以进行收藏,然后需要的时候进行对照一下即可.这样能起到一个查阅的作用. 本文主要讲 ...
- hibernate注解随笔—10月8日
hibernate注解(herbinate4 jar包注解可用,使用hibernate3.3注解失败) 如果javabean与数据库中表名一致(不区分大小写),则注解不用写@Table(name=&q ...
- Hibernate注解使用以及Spring整合
Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...
- Hibernate注解映射联合主键的三种主要方式
今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...
- 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...
- Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...
- 。。。Hibernate注解配置的注意事项。。。
今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...
- Hibernate注解错误之- org.hibernate.MappingException: Could not determine type for:
Hibernate 注解 @OneToOne 时候,出现以下错误,经调试,发现 注解要么全部放在字段上,要么全部放在get方法上,不能混合使用! org.hibernate.MappingExcept ...
- Hibernate 注解 没有加@Column一样会在数据库创建这些字段
Hibernate 注解 没有加@Column一样会在数据库创建这些字段 如下一个注解类: package com.hyy.hibernate.one_to_many.domain; import j ...
随机推荐
- vue 绑定样式的几种方式
vue 绑定样式 对象语法 1.v-bind:class设置一个对象,动态切换class <div :class="{'active':isActive}">xxx&l ...
- ThinkPad T400 键帽下面的X支架的安装方法
有一台古老的T400,清理键盘的时候,X支架老化断了,淘宝买了几个支架,研究一下安装方法: 1.注意支架方向:上面是横向的细支架,下面是两个小孔2.用小螺丝刀把下面的两个小孔推进键盘下面的两个金属钩里 ...
- flutter 监听返回键
### 监听手机返回键(双击退出) ``` import 'package:fluttertoast/fluttertoast.dart'; //提示插件 class WillPopScopeTest ...
- Vue.js 2.x笔记:指令(4)
1. 内置指令 指令是Vue.js 中一个重要的特性,主要提供了一种机制将数据的变化映射为DOM 行为. Vue.js 本身提供了大量的内置指令来进行对DOM 的操作,同时可以开发自定义指令. 2. ...
- windows 平台使用 VS2017 编译openssl源码
windows 平台使用 VS2017 编译openssl源码 1)依赖安装 安装 perl 脚本解释器 下载 http://libevent.net/download 安装 nasm 汇编器 C:\ ...
- ionic3使用moment.js
安装npm模块 $ npm install moment 例如在/home/home.ts文件里 import { Component } from '@angular/core'; import { ...
- AB PLC教程
把文档贴到Blog.BBS或个人站等: 复制 预览 普通尺寸(450*500pix) 较大尺寸(630*500pix)
- pixy&STM32使用记录(串口&SPI外设)
先踏踏实实的把stm32的外设串口,SPI搞清楚,不要眼高手低,看不起小事.用SPI通信将pixy的数据读出来,将数据用串口发到串口助手上,然后处理数据,利用STM32的定时器调节pwm,控制电机,先 ...
- Java面试题之基础篇概览
Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...
- winform动态生成新窗体并添加控件执行命令
主要代码 Form nf = new Form(); ; ; nf.Width = _w; nf.Height = _h; //添加textbox TextBox tb = new TextBox() ...