Hibernate的Annotation注解
当项目变得比较大的时候,如何还使用hbm.xml文件来配置Hibernate实体就会变得比较复杂。这里Hibernate提供了Annotation注解方式,使得Hibernate的映射文件变得很方便管理了。
这里简单介绍Hibernate的Annotation注解
一、声明实体
@Entity
对实体注释。任何Hibernate映射对象都要有这个注释
@Table
声明此对象映射到数据库的数据表,通过它可以为实体指定表(talbe),目录(Catalog)和schema的名字。该注释不是必须的,如果没有则系统使用默认值(实体的短类名)。
@Version
该注释可用于在实体Bean中添加乐观锁支持。
二、声明主键
@Id
声明此属性为主键。该属性值可以通过应该自身创建,但是Hibernate推荐通过Hibernate生成
@GeneratedValue
指定主键的生成策略。有如下四个值
TABLE:使用表保存id值
IDENTITY:identitycolumn
SEQUENCR :sequence
AUTO:根据数据库的不同使用上面三个
三、声明普通属性
@Column
声明该属性与数据库字段的映射关系。
@Column(nam=”category_name” length=20)
Public void getCategoryName(){
Return this.categoryName;
}
注意:
1、 当POJO有属性不需要映射的时候一定要用@Transitent修饰,该注释表示此属性与表没有映射关系,只是一个暂时的属性。
2、 @Lob注释表示该属性持久化为Blob或者Clob类型,具体取决于属性的类型。
四、声明关联关系
一对多关联关系
@OneToMany(mappedBy=” person”,cascade=CascadeType.ALL,fetch=FetchType.LAZY)
一对多声明
@ManyToOne(cascade=CascadeType.REFRESH,)
@JoinColumn
多对一声明 ,声明为双向关联
一对一关联关系
@OneToOne(optional= true,cascade =CascadeType.ALL, mappedBy = “person”)
一对一关联声明
@OneToOne(optional = false, cascade = CascadeType.REFRESH)
@JoinColumn(name = “Person_ID”, referencedColumnName = “personid”,unique = true)
声明为双向关联
多对多关联关系
@ManyToMany(mappedBy= “students”)
多对多关联声明。
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = “Teacher_Student”,
joinColumns = {@JoinColumn(name = “Teacher_ID”, referencedColumnName =“teacherid”)},
inverseJoinColumns = {@JoinColumn(name = “Student_ID”, referencedColumnName =“studentid”)})
实例:
有如下两个实体,商品:Goods,分类Category。两者是多对一的关联关系。
使用Hibernate Annotation注解如下
Goods.java @Entity
@Table(name = "goods", catalog = "test")
public class Goods implements java.io.Serializable { private static final long serialVersionUID = 1L;
private String goodsId;
private Category category;
private String goodsName; public Goods() {
} /*
* 主键
* 生成策略为自动增长
* 唯一、长度为20
*/
@Id
@GeneratedValue
@Column(name = "goods_id", unique = true, nullable = false, length = 20)
public String getGoodsId() {
return this.goodsId;
} public void setGoodsId(String goodsId) {
this.goodsId = goodsId;
} /*
* 多对一关联关系
* 延迟加载:fetch = FetchType.LAZY
* 引用外键:category_id
*
*/
@ManyToOne(fetch = FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name = "category_id")
public Category getCategory() {
return this.category;
} public void setCategory(Category category) {
this.category = category;
} @Column(name = "goods_name", nullable = false, length = 50)
public String getGoodsName() {
return this.goodsName;
} public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
} }
Category.java
@Entity
@Table(name = "category", catalog = "test")
public class Category implements java.io.Serializable { private static final long serialVersionUID = -1877960009126534682L; private String categoryId;
private String categoryName;
private Set<Goods> goodses = new HashSet<Goods>(0); public Category() {
} /*
* 主键
* 生成策略为自动增长
* 唯一、长度为20
*/
@Id
@GeneratedValue
@Column(name = "category_id", unique = true, length = 10)
public String getCategoryId() {
return this.categoryId;
} public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
} @Column(name = "category_name", length = 20)
public String getCategoryName() {
return this.categoryName;
} public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
} /*
* 一对多关联关系
* 级联关系:cascade=CascadeType.ALL
* 延迟加载:fetch = FetchType.LAZY
* 映射:mappedBy = "category"
*/
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "category")
public Set<Goods> getGoodses() {
return this.goodses;
} public void setGoodses(Set<Goods> goodses) {
this.goodses = goodses;
} }
Hibernate的Annotation注解的更多相关文章
- Hibernate之Annotation(注解的方式,非映射)
在hibernate 3.0之后,可以建立一个符合JPA标准的Annotation,以hibernate3.3.2GA为例 Annotation 以 hibernate Annotation 3.3. ...
- hibernate annotation注解方式来处理映射关系
在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...
- Hibernate 零配置之Annotation注解
JPA规范推荐使用Annotation来管理实体类与数据表之间的映射关系,从而避免同时维护两份文件(Java 实体类 和 XML 映射文件),将映射信息(写在Annotation中)与实体类集中在一起 ...
- Java - 使用hibernate配置文件 + JPA annotation注解操作数据库
本程序运行环境:IDEA. 实际上我对hiberbate与注解的关系还不是太清晰.据我所知注解都是Java JPA的,那么我的理解是:hibernate就应该只是通过这些JPA标识及hibernate ...
- hibernate3整合spring2时hibernate即用注解又用配置文件情况时spring配置文件的配置写法
hibernate只用注解时,spring的配置文件的配置如下 <bean id="dataSource" class="org.apache.commons.db ...
- JPA Annotation注解
JPA & Hibernate 注解 先说说JPA和Hibernate的关系 JPA(Java Persistence API),是Java EE 5的标准ORM接口,也是ejb3规范的一部分 ...
- hibernate关联映射注解
转自:hibernate annotation注解方式来处理映射关系 在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说 ...
- Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)(使用Annotation注解)(Junit测试类)
1. 在IntelliJ中新建maven项目 给出一个建好的示例 2. 在pom.xml中配置依赖 包括: spring-context spring-orm hibernate-core mysql ...
- 自己写的基于java Annotation(注解)的数据校验框架
JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...
随机推荐
- Android(Xamarin)之旅(五)
2016年1月23日,北京迎来了很痛苦的一天,冻死宝宝了,一天都没有出我自己的小黑屋,在这屋子里自娱自乐.不知道你们呢 对于android的四大基本组件(Activity.Service.Broadc ...
- RBAC用户权限管理数据库设计
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- IOS 6和 IOS7适配的一些问题
由于在做一个ios的通用设计平台,那么客户端解析的时候就涉及到一些ios不同版本,不同分辨率的适配问题 首先碰到的就是navigation bar中的item的背景色的问题 在ios7中设置setti ...
- js性能优化
使用局部变量(尽量缩短作用域链)JavaScript引擎对变量的解析时间跟作用域链的深度有关.局部变量由于处于链尾,存取速度是最快的,因此,一个好的经验是:任何非局部变量使用超过一次时,请使用局部变量 ...
- Ubuntu grub引导修复
通过USB启动盘安装系统时将引导程序指定到/dev/sdb1,正常应该是指定到/dev/sdb才是,导致安装之后启动不起来. 重新通过USB启动盘进入试用界面,然后打开终端通过如下操作进行grub引导 ...
- 【NHibernate】列“ReservedWord”不属于表 ReservedWords
NHibernate+FluentNHibernate+MySql 运行时黄页显示下边的异常,项目中找了半天没出现过这个列的关键字. [ArgumentException: 列“ReservedWor ...
- 【解题报告】BZOJ2550: [Ctsc2004]公式编辑器
题意:给定一个可视化计算器的操作序列,包括插入数字.字母.运算符.分数.矩阵以及移动光标.矩阵插入行.插入列,输出操作序列结束后的屏显(数学输出). 解法:这题既可以用来提升OI/ACM写大代码模拟题 ...
- c# Invalidate() Update() Refresh()的区别
Control.Invalidate方法:使控件的特定区域无效并向控件发送绘制消息. 通常情况下,用Invalidate()使区域无效就可触发该控件的重画了,但在一些条件下却没有触发重画.例如: pr ...
- android 中View的优化
在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候, ...
- reduce方法
API里面这样写 reduce(initial, sym) → obj reduce(初始值,符号) reduce(sym) → obj re ...