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 ...
随机推荐
- 在Winform开发框架中下拉列表绑定字典以及使用缓存提高界面显示速度
在我们开发Winform界面的时候,往往需要绑定数据字典操作,也就是绑定一些下拉列表或者一些列表显示等,以便我们方便选择数据操作,常见的字典绑定操作就是对下拉列表的处理,本篇随笔是基于DevExpre ...
- Web后台快速开发框架
Web后台快速开发框架 Coldairarrow 目录 目录 第1章 目录 1 第2章 简介 3 第3章 基础准备 4 3.1 开发环境要求 4 3.2 ...
- openstack 5大组件之间的关系和基本架构思维导图
云计算是一种按使用量付费的模式,这种模式提供可用的/便捷的/按需的网络访问,进入可配置的计算资源共享池(资源包括网络/服务器/存储/应用软件和服务),这些资源能够被快速提供,只需投入很少的管理工作或与 ...
- 工具(2): 极简MarkDown排版介绍(How to)
如何切换编辑器 切换博客园编辑器为MarkDown:MarkDown Editor 选择一个在线编辑和预览站点:StackEdit 如何排版章节 MarkDown: 大标题 ========== 小标 ...
- Java 常见数据交换格式——xml、json、yaml
目录 数据交换格式介绍 XML 使用DOM方式解析 使用SAX方式解析 使用DOM4J方式解析 使用JDOM方式解析 JSON 使用JSONObject方式将数据转换为JSON格式 利用JSONObj ...
- log4j2日志模板
log4j2.xml <?xml version="1.0" encoding="UTF-8"?> <!--设置log4j2的自身log级别为 ...
- JS前端无侵入实现防止重复提交请求技术
JS前端无侵入实现防止重复提交请求技术 最近在代码发布测试的过程中,我发现有些请求非常的消耗服务器资源,而系统测试人员因为响应太慢而不停的点击请求.我是很看不惯系统存在不顺眼的问题,做事喜欢精益求精, ...
- PHP——秒数转换为时分秒
前言 通讯记录需要用到的一个方法,就是将秒转为时分秒 方法 PHP有内置的方法,直接用即可,不过这个只是24小时以内.对于通讯录来说是够用了~ 示例 $v = 30; gmdate('H:i:s', ...
- Django_ORM操作 - 查询
ORM 操作 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(* ...
- 简单 php 代码跟踪调试实现
简单 php 代码跟踪调试实现 debug_backtrace:生成回溯 debug_print_backtrace:打印回溯 1. debug_backtrace ($options = DEBUG ...