【问题标题】:>>> Hibernate Example using inheritence <<<>>> 使用继承的 Hibernate 示例 <<<
【发布时间】:2012-08-29 21:24:30
【问题描述】:

我有两个实体,一个是项目,另一个是水果。我想首先作为另一个的超类来实现,并且我希望超类的所有参数都被它的子类继承。

我还希望在构建数据库时将该超类表及其所有属性绑定到子类表,即,如果我创建更多子类,我不希望所有子类都写入本应包含的值超级类。

我应该如何做到这一点?

item.java

  @MappedSuperclass
  @DiscriminatorColumn(name="Item")
  @Inheritance(strategy = InheritanceType.JOINED)
  public abstract class Item implements java.io.Serializable
   {
      // here goes all values of the class Item
   }

水果.java

   @Entity
   @PrimaryKeyJoinColumn(name="ART_ID")
   public class Fruit extends Item implements java.io.Serializable{
      // here goes proper values of this class 
   }

数据库.db

   create table Item
   (
    ITEM_ID          bigint not null auto_increment,
    ITEM_NAME         varchar(25) not null,
    );

   create table Fruit
    (
    FRUIT_DATEFROZEN date,
    );

);

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    我为 complicated inheritance tree 实现了类似以下内容。

    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
    public abstract class Item
    {
        @Id
        Long id;
    
        String name;
    }
    
    @DiscriminatorValue("FRUIT")
    @SecondaryTable( name = "fruit" )
    public class NumberAnswer extends Item
    {
        @Column(table = "fruit")
        Date frozen;
    }
    
    create table Item
    (
      ID     bigint not null auto_increment,
      NAME   varchar(25) not null,
    );
    
    create table Fruit
    (
      ID     bigint not null
      FROZEN date,
    );
    

    【讨论】:

    • 我应该如何实现我的数据库文件?我应该创建表项(ITEM_ID bigint not null auto_increment,ITEM_NAME varchar(25) not null,);创建表 Fruit ( FRUIT_DATEFROZEN date, );或者对于每个子类表我应该有超类表的值,例如 create table Fruit (ITEM_ID bigint not null auto_increment, ITEM_NAME varchar(25) not null, FRUIT_DF date, );create table Meat ( ITEM_ID bigint not null auto_increment, ITEM_NAME varchar(25) not null, MEAT varchar(25), );
    • 在子类表中,id 不会增加,因为它们与主表的 id 相同,您可能应该从 fruit.id => item.id 添加一个外键
    • 我明白了!所以我将不得不制作作为 item_id 外键的fruit_id!太好了,正如我所愿,现在看看它是否有效。 :)
    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2016-11-03
    • 2013-11-30
    • 2015-08-20
    相关资源
    最近更新 更多