jackyrong

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

   hibernate中的继承关系的处理手法有三种,下面小结之,外加上ejb3的这方面的描述.

  比如有个动物类animal,假设有如下属性
    private int id;
 private String sex;

  而它的子类比如bird鸟类,有另外的属性hight,

    它的子类比如pig类,有另外的属性weight,

那么三类办法来处理,在hibernate中
   1) 每个子类对应一张表

   bird类 有id,sex,hight属性

   pig 类有 id,sex,weight属性

     它们有各自的xxx.hbm.xml了

 

2)  table per subclass
     这个其实就是把公共属性放到父类中去,各子类只保留其子类特有的属性,并且通过id等进行关联,比如
  animal类里,还是有id,sex属性
  bird类里,有id,hight属性
  pig类里,有id,weight属性
      而animal.hbm.xml中的设置为
    <joined-subclass name="pig" table="pig>
       <key column="id>
      <prperty name="weight"/>

    <joined-subclass name="bird" table="pig>
       <key column="id>
      <prperty name="height"/>

  

3) 冗余分类
      比如animal表如下
       id    sex height  weight

      好明显这里是有冗余的哦,但可以加个标志来区分,比如p为pig类,b为bird类
    下面看anmimal.hbm.xml
     ...........

     <discriminator column="type" type="string">
   

      <subclass name="pig" discriminator-value="P">
         <prperty name="weight"/>

</subclass>

   <subclass name="bird" discriminator-value="b">
         <prperty name="height"/>

</subclass>

 

  再看在ejb3里如何玩:
   animal.java
  

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="animalType")
@DiscriminatorValue("A")
public class Animal {
 
 @Id
 private int id;
 private String sex;
 
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
}

 

   bird.java
 

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@DiscriminatorValue("B")
public class Bird extends Animal{
 private int height;

 public int getHeight() {
  return height;
 }

 public void setHeight(int height) {
  this.height = height;
 }
}

 

pig.java
 

@Entity
@DiscriminatorValue("P")
public class Pig extends Animal{
 private int weight;

 public int getWeight() {
  return weight;
 }

 public void setWeight(int weight) {
  this.weight = weight;
 }
}

   

   

posted on 2008-07-28 17:06  jackyrong的世界  阅读(483)  评论(0编辑  收藏  举报