美文网首页
Hibernate注解@Inheritance、@Discrim

Hibernate注解@Inheritance、@Discrim

作者: 大panda | 来源:发表于2019-02-15 09:17 被阅读0次

    这三个注解用于hibernate多表同时保存使用,多表分为主子表形式

    • Inheritance
      必须定义其属性strategy

      • strategy=InheritanceType.SINGLE_TABLE 将父类和所有子类集合,存在一张表中,全部创建新的字段
      • strategy=InheritanceType.TABLE_PER_CLASS 每一个类创建一个表,这些表相互独立
      • strategy=InheritanceType.JOINED 将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系
    • DiscriminatorColumn
      只能用在@Inheritance( strategy=InheritanceType.SINGLE_TABLE或JOINED下)
      都有默认值,所以属性均可选,源码及解释如下:

    /**
     * <pre>
     *     Example:
     *     &#064;Entity
     *     &#064;Table(name="CUST")
     *     &#064;Inheritance(strategy=SINGLE_TABLE)
     *     &#064;DiscriminatorColumn(name="DISC", discriminatorType=STRING, length=20)
     *     public class Customer { ... }
     *     &#064;Entity
     *     public class ValuedCustomer extends Customer { ... }
     * </pre>
     */
    public @interface DiscriminatorColumn {
    
        /**
         * (Optional) The name of column to be used for the discriminator.
         * 对应列名
         */
        String name() default "DTYPE";
    
        /**
         * (Optional) The type of object/column to use as a class discriminator.
         * Defaults to {@link DiscriminatorType#STRING DiscriminatorType.STRING}.
         * 对应列的字段类型,DiscriminatorType有STRING、CHAR、INTEGER
         */
        DiscriminatorType discriminatorType() default STRING;
    
        /**
         * (Optional) The SQL fragment that is used when generating the DDL
         * for the discriminator column.
         * <p> Defaults to the provider-generated SQL to create a column
         * of the specified discriminator type.
         * DDL生成时使用的SQL片段,默认为提供程序生成的SQL来创建列
         */
        String columnDefinition() default "";
    
        /**
         * (Optional) The column length for String-based discriminator types.
         * Ignored for other discriminator types.
         * 字符串类型要求的长度,其他类型此项请忽略
         */
        int length() default 31;
    }
    
    • DiscriminatorValue
      插入的值,直接使用即可

    用途:hibernate映射时,采用主从表关联形式映射,父类代表主表,子类注解代表将向主表插入数据库的数据值

    • 父类
      @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
      @DiscriminatorColumn(name="a_type", discriminatorType=DiscriminatorType.STRING, length=30)
    • 子类
      @DiscriminatorValue("我是值")
      表中有一列a_type,类型为字符串,长度30,操作插入的值为“我是值”

    相关文章

      网友评论

          本文标题:Hibernate注解@Inheritance、@Discrim

          本文链接:https://www.haomeiwen.com/subject/fnaueqtx.html