当项目变得比较大的时候,如何还使用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注解的更多相关文章

  1. Hibernate之Annotation(注解的方式,非映射)

    在hibernate 3.0之后,可以建立一个符合JPA标准的Annotation,以hibernate3.3.2GA为例 Annotation 以 hibernate Annotation 3.3. ...

  2. hibernate annotation注解方式来处理映射关系

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...

  3. Hibernate 零配置之Annotation注解

    JPA规范推荐使用Annotation来管理实体类与数据表之间的映射关系,从而避免同时维护两份文件(Java 实体类 和 XML 映射文件),将映射信息(写在Annotation中)与实体类集中在一起 ...

  4. Java - 使用hibernate配置文件 + JPA annotation注解操作数据库

    本程序运行环境:IDEA. 实际上我对hiberbate与注解的关系还不是太清晰.据我所知注解都是Java JPA的,那么我的理解是:hibernate就应该只是通过这些JPA标识及hibernate ...

  5. hibernate3整合spring2时hibernate即用注解又用配置文件情况时spring配置文件的配置写法

    hibernate只用注解时,spring的配置文件的配置如下 <bean id="dataSource" class="org.apache.commons.db ...

  6. JPA Annotation注解

    JPA & Hibernate 注解 先说说JPA和Hibernate的关系 JPA(Java Persistence API),是Java EE 5的标准ORM接口,也是ejb3规范的一部分 ...

  7. hibernate关联映射注解

    转自:hibernate annotation注解方式来处理映射关系 在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说 ...

  8. Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)(使用Annotation注解)(Junit测试类)

    1. 在IntelliJ中新建maven项目 给出一个建好的示例 2. 在pom.xml中配置依赖 包括: spring-context spring-orm hibernate-core mysql ...

  9. 自己写的基于java Annotation(注解)的数据校验框架

    JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...

随机推荐

  1. Co-saliency-Huazhu Fu

    这里主要是fu老师的显著性检测分割的一些资料. 对应的主页为:http://hzfu.github.io/ 对应的一些codes:https://github.com/HzFu

  2. Loadrunner监控Linux的17个指标

    这17个指标根据需要设置吧,指标设置的越多,对服务器真实值影响越大,所以要秉承按需而设的原则.   1.Average load:Average number of processes simulta ...

  3. How to Test Controller Concerns in Rails 4

    Concerns are a new feature that was added in Rails 4. They allow to clean up code in your models and ...

  4. php常用的几个模块

    上传下载.操作excel.编码.内存管理.浮点运算.系统时间.seo.web安全.网络 0.环境搭建 1.上传下载 借助jquery的uploaderfily插件.表单内嵌iframe提交 2.exc ...

  5. 【洛谷P3143】Diamond Collector

    算是一道dp 首先,排序好每一个架子上都是一段区间,然后只需要统计每个点向左向右最长延伸的区间. 所以我们预处理出每个点以左.以右最大能延伸的长度(最多能选几个差值不超过k的) 然后枚举每个点作为断点 ...

  6. HTTP1.1初识

    Http(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议. Http1.1版中,有一个持续连接(Persistent Connections)机制,其作为Http1.1中建立连接的 ...

  7. 【Android UI】Android ListView详解

    在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...

  8. 在Web应用中接入微信支付的流程之极简清晰版

    在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...

  9. Windows服务器安装配置PHP7.0环境图文教程

    摘自http://www.111cn.net/phper/linux-php/109865.htm Windows服务器安装配置PHP7.0环境图文教程 www.111cn.net 更新:2016-0 ...

  10. C++是一把很奇怪的刀

    C++是一把很奇怪的刀,首尾都是刀刃.用刀能出什么,还是要看拿刀的人.