专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » hibernate多对一:hibernate关联映射-多对一 »正文

hibernate多对一:hibernate关联映射-多对一

来源: 发布时间:星期六, 2009年2月21日 浏览:0次 评论:0
几种关联:
多对:Employees--Department ; 多个员工对应个部门.
映射文件:
<many-to-one name="depart" column="depart_id" />
department.java
package sa.fs121.do;

public Department {

  private id;
  private String name;

  public getId {
     id;
  }

  public void Id( id) {
    this.id = id;
  }

  public String getName {
     name;
  }
public void Name(String name) {
    this.name = name;
  }

}

 
Employee.java
package sa.fs121.do;

public Employee {
  private id;
  private String name;
  private Department depart;

  public getId {
     id;
  }

  public void Id( id) {
    this.id = id;
  }

  public String getName {
     name;
  }

  public void Name(String name) {
    this.name = name;
  }

  public Department getDepart {
     depart;
  }

  public void Depart(Department depart) {
    this.depart = depart;
  }

}


即:员工部门,映射到部门实体.
使用hibernate映射员工和部门外键关系:
Employee.hbm.xml
<hibernate-mapping package="sa.fs121.do">

  < name="Employee">
    <id name="id">
      <generator ="native" />
    </id>

    <property name="name" />
    <!--    
    表示员工depart属性,对应depart表中id值,参考depart中id值表示整个对象;
    通过反射,hibernate可以找到depart对应department类,
    然后通过depart这个对象id值,找到department表中参考外键,
    缺省情况下,hibernate外键参考对象,就是department表中主键id.
    即:depart参考,就是department这个表中主键,也可以手工指定参考对象:
    使用:property-ref="xxxx",进行声明
     -->
    <many-to-one name="depart" column="depart_id" />
  </>

</hibernate-mapping>

 



Department.hbm.xml
<hibernate-mapping package="sa.fs121.do">
  < name="Department">
    <id name="id">
      <generator ="native" />
    </id>

    <property name="name" unique="true" />
  </>
</hibernate-mapping>

 



测试代码:
Department add {
    Session s = null;
    Transaction tx = null;

    try {
      Department depart = Department;
      depart.Name("department1");

      Employee employee = Employee;
      employee.Name("user1");
      employee.Depart(depart);

      s = HibernateUtils.getSession;
      tx = s.beginTransaction;
      s.save(depart);
      s.save(employee);

      tx.commit;

       depart;
    } catch (HibernateException e) {
      // TODO Auto-generated catch block
      e.prStackTrace;
    } finally {
       (s != null) {
        s.close;
      }
    }
    
     null;
  }

 



由于employee和department都处于持久态,所以session能捕获到其变化,并更新数据表.
且使用时,应该先创建department,否则会多出更新语句,耗费资源.
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: