Hibernate 注解注册

来源:互联网 发布:撮合交易平台源码 编辑:程序博客网 时间:2024/06/01 09:19
注解注册:

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编写测试类:
uConfiguration config =new AnnotationConfiguration().configure();
uSessionFactory factory = config.buildSessionFactory();
uSession session = factory.openSession();
usession.beginTransaction();
uProductBean bean = new ProductBean("张三",12,"898797");
usession.save(bean);
usession.getTransaction().commit();
usession.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
uname="t_stu_tea",指明中间表名
ujoinColumns={@JoinColumn(name="studentId")当前对象对应中间表的外键列名
uinverseJoinColumns={@JoinColumn(name="teacherId")}指明多对多中另一个表的外键列名。
0 0
原创粉丝点击