Hibernate的学习总结(映射类之间的组合关系)

能一张数据库表中包含了许多的字段:姓字段,名字段,电话字段,邮箱字段。其中可以看出来,姓字段和名字段可以细划分为姓名类别,电话和邮箱可以细划分为联系方式类别。而将此表映射到实体对象时,就可以分为2个实体类,姓名类和联系方式类。个人理解这样可以将表中没有划分的共通属性提炼出来。但有多张表中有联系方式和姓名类型字段时,可以用同一个实体类来映射,增加了复用性。

 

实现该映射方式的为:

1.建一个person类来映射数据库中的表

public class Person {

 private int id ;
 private Name name ;         Name类为姓名的实体类
 private Contact contact ;   Contact类为联系方式的实体类


 public Contact getContact() {
  return contact;
 }
 public void setContact(Contact contact) {
  this.contact = contact;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public Name getName() {
  return name;
 }
 public void setName(Name name) {
  this.name = name;
 }
}

 

2.各建立Name类和Contact类

public class Name {
 private String firstname ;
 private String lastname ;
 public String getFirstname() {
  return firstname;
 }
 public void setFirstname(String firstname) {
  this.firstname = firstname;
 }
 public String getLastname() {
  return lastname;
 }
 public void setLastname(String lastname) {
  this.lastname = lastname;
 }
}

 

public class Contact {
 private String address ;
 private String zipcode ;
 private String tel ;
 public String getAddress() {
  return address;
 }
 public void setAddress(String address) {
  this.address = address;
 }
 public String getTel() {
  return tel;
 }
 public void setTel(String tel) {
  this.tel = tel;
 }
 public String getZipcode() {
  return zipcode;
 }
 public void setZipcode(String zipcode) {
  this.zipcode = zipcode;
 }
}

 

3.在hbm配置文件中用component节点

<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
                            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="org.lxh.hibernate">

 <class name="Person" table="PERSON">
  <id name="id" column="ID" type="int">
   <generator class="assigned" />
  </id>
  <component name="name" class="org.lxh.hibernate.Name">
   <property name="firstname" column="FIRSTNAME" type="string" not-null="true" />
   <property name="lastname" column="LASTNAME" type="string" not-null="true" />
  </component>
  <component name="contact" class="org.lxh.hibernate.Contact">
   <property name="address" column="ADDRESS" type="string" not-null="true" />
   <property name="zipcode" column="ZIPCODE" type="string" not-null="true" />
   <property name="tel" column="TEL" type="string" />
  </component>
 </class>

</hibernate-mapping>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值