Hibernate学习笔记(四) 注解

目录

1.注解步骤
2.类的注解
3.属性的注解
4.关系的注解
5.注解与XML


一、注解步骤

以实体类Product为例。

1.在Product.java上添加注解
package com.how2java.pojo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
 
@Entity
@Table(name = "product_")
public class Product {
    int id;
    String name;
    float price;
     
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id")   
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "price")
    public float getPrice() {
        return price;
    }
    public void setPrice(float price) {
        this.price = price;
    }
      
}
2.在hibernate.cfg.xml中写明类的路径
      

二、类的注解

在类声明前面有两个注解:
@Entity 表示这是一个实体类,用于映射表
@Table(name = "product_") 表示这是一个类,映射到的表名:product_

@Entity
@Table(name = "product_")
public class Product {
    int id;
    String name;
    float price;
}

三、属性的注解

属性注解是配置在属性对应的getter方法上的。

    @Id    //表示这是主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)     //表示自增长方式使用mysql自带的
    @Column(name = "id")    //表示映射到字段id
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

四、关系的注解

1.多对一注解

①修改hibernate.cfg.xml 中Product和Category的映射

        
        

②把Category的id和name字段改为支持注解
注意:getName上并没有加上@Column(name="name"),也可以达到映射的效果。 因为getName方法默认会被认为是字段映射。除非加上了@Transient才表示不进行映射。

@Entity
@Table(name = "category_")
public class Category {
    int id;
    String name;
     
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

③把Product的getCategory进行多对一映射

    @ManyToOne    //表示多对一关系
    @JoinColumn(name="cid")     //表示关系字段是cid
    public Category getCategory() {
        return category;
    }
    public void setCategory(Category category) {
        this.category = category;
    }
2.一对多注解

在上一步的基础上增加如下注解:
给getProducts方法加上一对多注解

    @OneToMany(fetch=FetchType.EAGER)    //表示一对多,fetch=FetchType.EAGER 表示不进行延迟加载(FetchType.LAZY表示要进行延迟加载)
    @JoinColumn(name="cid")     //表示映射字段
    public Set getProducts() {
        return products;
    }
3.多对多注解

①像上两步那样,为Product,User,Category 加上类和属性注解
②加上多对一注解ManyToOne
③加上一对多注解OneToMany
④ManyToMany
为Product的getUsers加上注解

    @ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
    @JoinTable(
            name="user_product",
            joinColumns=@JoinColumn(name="pid"),
            inverseJoinColumns=@JoinColumn(name="uid")
    )    
    public Set getUsers() {
        return users;
    }

为User的getProducts加上注解

    @ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
    @JoinTable(
            name="user_product",
            joinColumns=@JoinColumn(name="uid"),
            inverseJoinColumns=@JoinColumn(name="pid")
    )    
    public Set getProducts() {
        return products;
    }

⑤hibernate.cfg.xml中的映射

        
        
        

你可能感兴趣的:(Hibernate学习笔记(四) 注解)