注解注册:
hibernate注解需要导入以下jar包
:
hibernate-commons-annotations.jar
hibernate-annotations.jar
ejb3-persistence.jar
@
Entity
定义实体类,表示该类可以通过注解进行操作
@
Table(name="t_user2")
指明该实体类映射的数据库表名
@
Id
表示定义主键,
@
GeneratedValue(strategy=GenerationType.AUTO)
定义主键生成策略,为数据库自动增长(
AUTO 5.0不支持
)
@GeneratedValue(strategy=GenerationType.IDENTITY) hibernate4.0,5.0均支持
@
Column(name="productName")
定义该属性对应的列名,如果属性名和列名一致可以不用写。
@Transient 表示该属性并非一个到数据库表的字段的映射
在hibernate.cfg.xml中注册注解类:
<mapping class="com.lovo.bean.ProductBean"/>
u
编写测试类:
u
Configuration config =
new AnnotationConfiguration().configure();
u
SessionFactory factory = config.buildSessionFactory();
u
Session session = factory.openSession();
u
session.beginTransaction();
u
ProductBean bean = new ProductBean("张三",12,"898797");
u
session.save(bean);
u
session.getTransaction().commit();
u
session.close();
Hibernate 注解一对一(外键关联)
从表方配置:
public class WifeBean {
@OneToOne //表示一对一@JoinColumn(name="husbandId",unique=true)
private HusbandBean husband;}name="husbandId"
name
指明从表外键列名
unique=true
为唯一约束,表示唯一外键关联
主表方配置:
public class HusbandBean { @OneToOne(mappedBy="husband")
private WifeBean wife;
}
mappedBy="husband"
表示当前属性关联的从表对象的关联属性名。同时指明只有添加从表对象时,才添加外键列。相当于inverse=true
查询没有妻子的丈夫
select h from HusbandBean h left join h.wife w where w is null
Hibernate 注解一对多
一方配置:
@OneToMany
(
fetch=FetchType.EAGER, targetEntity=HouseBean.class, cascade=CascadeType.ALL, mappedBy="person"
)
@JoinColumn(name="personId")
private Set houses = new HashSet();
fetch=FetchType.EAGER
指定是否延迟加载,值为
FetchType.LAZY
表示延迟,
为FetchType.EAGER
表示立即加载targetEntity=HouseBean.class集合中存放元素类型mappedBy="husband" 关联从表对象中的关联对象属性名。同时指明只有添加从表对象时,才添加外键列。相当于inverse=truecascade=CascadeType.ALL为级联操作@JoinColumn(name="personId")指明从表中的外键列名
多方配置
:
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="personId")
private Person person;
@JoinColumn(name="personId")指明从表中的外键列名
Hibernate注解一对多。默认采用多方维护外键方式。相当于在一方set标签加入了 inverse="true"。
Hibernate注解多对多
u多方配置:
@ManyToMany(fetch=FetchType.LAZY,
targetEntity=TeacherBean.class)
@JoinTable(name="t_stu_tea",
joinColumns={@JoinColumn(name="studentId")},
inverseJoinColumns={
@JoinColumn(name="teacherId")})
private Set teacherSet;
u
u
name="t_stu_tea",指明中间表名
u
joinColumns={@JoinColumn(name="studentId")当前对象对应中间表的外键列名
u
inverseJoinColumns={@JoinColumn(name="teacherId")}指明多对多中另一个表的外键列名。