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类型,具体取决于属性的类型。

     @Transient

       用于注释pojo对象中的属性,被注释的属性将成为短暂的,不会持久化到数据库的“短暂”属性。

四、声明关联关系

      一对多关联关系

         @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注解)