声明属性Hibernate的Annotation注解
2013-05-19 19:23
399 查看
工作之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下声明属性
当项目变得比较大的时候,如何还应用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
声明该属性与数据库字段的映射关系。
注意:
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
Category.java
文章结束给大家分享下程序员的一些笑话语录: Google事件并不像国内主流媒体普遍误导的那样,它仅仅是中国Z府和美国公司、中国文化和美国文化甚至中国人和美国人之间的关系,是民族主义和帝国主义之间的关系;更重要的是,它就是Z府和公司之间的关系,是权力管制和市场自由之间的关系。从这个意义上说,过度管制下的受害者,主要是国内的企业。Google可以抽身而去,国内的企业只能祈望特区。www.ishuo.cn
当项目变得比较大的时候,如何还应用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; } }
文章结束给大家分享下程序员的一些笑话语录: Google事件并不像国内主流媒体普遍误导的那样,它仅仅是中国Z府和美国公司、中国文化和美国文化甚至中国人和美国人之间的关系,是民族主义和帝国主义之间的关系;更重要的是,它就是Z府和公司之间的关系,是权力管制和市场自由之间的关系。从这个意义上说,过度管制下的受害者,主要是国内的企业。Google可以抽身而去,国内的企业只能祈望特区。www.ishuo.cn
相关文章推荐
- hibernate annotation 之 注解声明
- hibernate annotation 之 注解声明
- hibernate的注解为何要在属性的get方法上声明
- hibernate的注解为何要在属性的get方法上声明
- hibernate的级联(hibernate注解的CascadeType属性)
- 使用hibernate 提取属性 hibernate 注解@Formula
- Hibernate用columnDefinition注解给实体属性设置默认值
- hibernate的注解属性mappedBy详解
- hibernate Annotation(注解映射)测试一
- Hibernate的Annotation注解
- Hibernate4实战之Hibernate4注解零配置 浏览(88173)|评论(0) 交流分类:Java|笔记分类: 未分类 @Entity,注册在类头上,将一个类声明为一个实体bean
- Hibernate Annotation (Hibernate 注解)
- spring+hibernate实体类注解详解(非原创) + cascade属性取值
- 为Annotation注解添加各种属性
- Hibernate 注解 annotation
- hibernate之自动导入, 包声明, update与insert属性
- Hibernate初学者---关于annotation注解的相关知识
- Hibernate Annotation (Hibernate 注解)
- Hibernate之Annotation(注解的方式,非映射)
- hibernate的注解属性mappedBy详解