hibernate里常用注解包括,类注解,属性注解,关系注解,其他的注解
类注解:在注解示例-注解方式的Product中,Product类声明前面有两个注解:@Entity 和 @Table(name = "product_")
@Entity 表示这是一个实体类,用于映射表
@Table(name = "product_") 表示这是一个类,映射到的表名:product_
@Entity
@Table(name = "product_")
public class Product {
int id;
String name;
float price;
}
属性注解:属性注解是配置在属性对应的getter方法上的
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int getId() {
return id;
}
@Id 表示这是主键
@GeneratedValue(strategy = GenerationType.IDENTITY) 表示自增长方式使用mysql自带的
@Column(name = "id") 表示映射到字段id
多对一注解:
把多对一改成用注解来实现
1. 把Category的id和name字段改为支持注解
注: 分类的getName上并没有加上@Column(name="name"),也可以达到映射的效果。 因为getName方法默认会被认为是字段映射。 除非加上了@Transient 才表示不进行映射
2. 把Product的getCategory进行多对一映射
@ManyToOne
@JoinColumn(name="cid")
public Category getCategory() {
return category;
}
@ManyToOne 表示多对一关系
@JoinColumn(name="cid") 表示关系字段是cid
3. 为hibernate.cfg.xml 添加Category的映射
<mapping class="com.how2java.pojo.Category" />
一对多注解:
在上一步的基础上做如下改动
1. 为Category再加product集合,并提供getter和setter
Set<Product> products;
public Set<Product> getProducts() {
return products;
}
public void setProducts(Set<Product> products) {
this.products = products;
}
2. 给getProducts方法加上一对多注解
@JoinColumn(name="cid") 表示映射字段
多对多注解:
1. 在 基于XML配置的多对多知识点的基础上进行多对多注解的修改
2.像上两步那样,为Product,User,Category 加上类和属性注解
3. 加上 多对一注解ManyToOne
4. 加上 一对多注解OneToMany
5. ManyToMany
为Product的getUsers加上
@OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="cid")
public Set<Product> getProducts() {
return products;
}
@OneToMany 表示一对多,fetch=FetchType.EAGER 表示不进行延迟加载(FetchType.LAZY表示要进行延迟加载)
@JoinColumn(name="cid") 表示映射字段
多对多注解:
1. 在 基于XML配置的多对多知识点的基础上进行多对多注解的修改
2.像上两步那样,为Product,User,Category 加上类和属性注解
3. 加上 多对一注解ManyToOne
4. 加上 一对多注解OneToMany
5. ManyToMany
为Product的getUsers加上
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(
name="user_product",
joinColumns=@JoinColumn(name="pid"),
inverseJoinColumns=@JoinColumn(name="uid")
)
public Set<User> 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<Product> getProducts() {
return products;
}