有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate继承表每类和单表混合

我正在开发网上商店,我需要Hibernate映射方面的帮助。我继承了以下遗产:

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

我想要的:
1) id、名称、描述等公共字段将位于@MappedSuperclass BaseProduct中
2) 乐器类型(吉他、鼓)将为这些类型的乐器提供公共字段
3) 最后,混凝土类AVGUITAT、ELGUITAT等将具有这种混凝土乐器的独特特性

最大的问题是,我希望两种类型的乐器有两个表:吉他和鼓(继承类型。每个类有一个表),具体类有一个表继承类型。单_表,这意味着将有一个表用于原声吉他和电吉他,一个表用于原声鼓和电鼓,并带有相应的判别列

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

更新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 {
}

因此,不幸的是,使用这种解决方案,任何混合都无法工作


共 (2) 个答案

  1. # 1 楼答案

    你可以这样做

        @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;
    
         }
    

    根据结果,你会得到两张桌子,即吉他和鼓

  2. # 2 楼答案

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

    现在你们的数据库里有三张桌子。供你参考,退房here