http://blog.csdn.net/chenssy/article/details/8945391
当项目变得比较大的时候,如何还使用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() {
- }
-
-
-
-
-
-
- @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;
- }
-
-
-
-
-
-
-
- @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() {
- }
-
-
-
-
-
-
- @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;
- }
-
-
-
-
-
-
-
- @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;
- }
-
- }
-