当项目变得比较大的时候,如何还使用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;
}
}
分享到:
相关推荐
HibernateAnnotation注解 api手册
hibernate annotation 注解编程 官网文档 hibernate annotation 注解编程 官网文档 hibernate annotation 注解编程 官网文档
现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用xml文件来映射更具有可读性,自我感觉以后Hibernate Annotation的...
hibernate 注解 annotation 教程
Hibernate Annotation 笔记 总结 注解 注解事务,声明事务,详解。
hibernate 关系注解:Hibernate Annotation关系映射
简介: 在过去几年里,Hibernate不断发展,...Hibernate annotation使用了ejb JPA的注解,所以,下面安装配置hibernate annotation环境时,需要导入ejb的包。许多网上的资料都是jpa hibernate annotation方面的资料。
2.4. Hibernate独有的注解扩展 2.4.1. 实体 2.4.2. 标识符 2.4.3. 属性 2.4.3.1. 访问类型 2.4.3.2. 公式 2.4.3.3. 类型 2.4.3.4. 索引 2.4.3.5. @Parent 2.4.3.6. 生成的属性 2.4.4. 继承 2.4.5. 关于单个关联关系...
现在已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用xml文件来映射更具有可读性,自我感觉以后Hibernate Annotation的映射方式将代替hibernate 的*....
hibernate中文的annotation使用说明,网上截下来的,希望对你有用
hibernate annotation 配置详细!
借助新的 Hibernate Annotation 库,即可一次性地分配所有旧映射文件——一切都会按照您的想法来定义——注解直接嵌入到您的 Java 类中,并提供一种强大及灵活的方法来声明持久性映射。籍由自动代码完成和语法突出...
springmvc注解.doc,Spring注解讲解.doc,struts2标签详解.pdf,struts2常用标签.pdf,Struts2页面开发中常用标签.pdf,Struts2注解详细说明文档.doc,Hibernate注解教程:Hibernate Annotation使用实例.maff
孤独的狼-------------hibernate_annotation 注解实现Hibernate映射
SSH2 annotation 实现struts2.1.6 spring2.5.6 hibernate3.3 全注解开发 hibernate延迟加载_懒加载 具体应用
Hibernate配置EhCache缓存之annotation注解[归类].pdf
这里是使用hibernate注解开发用到的annotation的jar包
声明为双向关联多对多关联关系多对多关联声明。实例:有如下两个实体,商品:Goods,分类Category。两者是多对一的关联关系。使用Hibernate Ann
annotationhibernate实体注解 一对多和多对一 详解 初学者必看 写的非常明白
支持hibernate3.x的Annotation注解,4.x版本均已集成此jar,无需下载。