2

我正在开发在线网上商店,我需要有关 Hibernate 映射的帮助。我有以下继承:

         BaseProduct
         /         \
     Guitar         Drum
     /    \         /    \
AcGuitar   ElGuitar AcDrum ElectricDrum

我想要的:
1) id、name、description 等常用字段将在@MappedSuperclass BaseProduct 中。
2)乐器类型(吉他,鼓)将具有这些类型的乐器的共同字段。
3)最后,具体类 AvGuitar、ElGuitar 等将具有此具体乐器的独特属性。

最大的问题是我希望有两个表用于两种类型的乐器:t_guitar 和 t_drum(InheritanceType.TABLE_PER_CLASS),对于具体类,一个表 InheritanceType.SINGLE_TABLE,这意味着将有一个表用于原声和电吉他以及一张带有相应判别列的声学和电鼓表。

我怎样才能做到这一点?谢谢!

更新 1

由于我需要将整个层次结构作为一种通用类型进行交互并将产品映射到另一个实体,因此我执行了以下操作:

@MappedSuperclass
public abstract class BaseProduct { //supercclass 

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private Long id;
    private String title;
    // etc
}

中级产品:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Product extends BaseProduct {
}

因此,使用此解决方案,不幸的是,任何混合仍然不起作用。

4

2 回答 2

0
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class base { 
@Id
private  String id;   //yr field

}

现在将有 yr db 中的三个表。供您参考检查。这里

于 2014-10-08T06:58:38.330 回答
0

你可以这样做......

    @MappedSuperclass
    public class base { 
    @Id
    private  String id;   //yr field

    }


    @Entity
    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(
    name="classname",
    discriminatorType=DiscriminatorType.STRING
    )
    public class drum  extends base{

   String drumProperties;  //yr drum prop.

    }

    @Entity
    @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(
    name="classname",
    discriminatorType=DiscriminatorType.STRING
    )
    public class guitar extends base {

    private String guitarProperties;    //guitar prop.
    }


    @Entity
    public class AcGuitar extends guitar{
    String acGuitarprop;

    }

   @Entity
   public class ElGuitar extends guitar{
   String elGuitarprop;

   }

    @Entity
   public class ElDrum extends drum{
   String elDrumprop;

   }

    @Entity

    public class AcDrum extends drum{
   String acDrumprop;

     }

结果你会在 yr DB 中得到两张桌子,即吉他和鼓

于 2014-10-07T07:42:17.113 回答