影子和风 2013-11-20 03:48 采纳率: 0%
浏览 862

hibernate hbm2ddl自动生成表时如何生成父类的属性

子类Master
父类BaseVo 属性
/**创建时间/
public Date TCreateTime;
/**创建人/
public String CCreateCde;

Master extends BaseVo

利用hibernate hbm2ddl 自动创建表时如何让Master对应的表生成字段 TCreateTime和CCreateCde

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 13:46
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在使用Hibernate HBM2DDL(Hibernate Mapping for Data Definition Language)自动创建数据库表功能时,你可以通过设置@Table注解来指定主键、外键等信息。但是,你不能直接控制父类属性的生成。

    然而,如果你确实希望在父类的属性上添加一些额外的约束或描述,你可以考虑以下几种方法:

    1. 使用@Column:在父类中定义一个列,并提供相应的注释。
    @Table(name = "parent_table")
    public class ParentClass {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Long id;
        
        // 添加其他属性...
    }
    

    然后,在子类中使用@JoinColumn注解来引用这个列:

    @Table(name="child_table")
    @Entity
    public class ChildClass extends ParentClass {
    
        @Column(name="additional_column_name", nullable=false, length=50)
        private String additionalColumnValue;
        
        // 添加其他属性...
    }
    

    这样,即使父类中的这些属性被忽略,它们仍然可以在子类中正确地使用。

    1. 使用@JoinTable:为父类中的每个关联属性创建一个新的JoinTable注解。这将确保所有关联关系都以相同的格式显示在数据库中。
    @Table(name = "parent_table")
    @Entity
    public class ParentClass {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Long id;
        
        @JoinTable(name="parent_child_join",
                   joinColumns={@JoinColumn(name="parent_id")},
                   inverseJoinColumns={@JoinColumn(name="child_id")})
        private Long childId;
        
        // 添加其他属性...
    }
    
    // 子类继承并重写此方法
    @Override
    protected void onCreate(SQLiteDatabase db) {
        super.onCreate(db);
        this.childId = new Long(id);  // 将id转换为Long类型
    }
    

    注意,这种方法仅适用于一对一的关系。对于多对一或多对多的关系,你需要分别为每个关联设置@JoinTable注解。

    1. 使用@EmbeddedId:如果父类有一个嵌套的对象,可以将其作为@Embeddable类型的@EmbeddedId来处理。
    @Table(name = "parent_table")
    @Entity
    public class ParentClass {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Long id;
        
        @EmbeddedId
        @Embeddable
        private ParentObject parentId;
        
        // 添加其他属性...
    }
    
    // 子类继承并重写此方法
    @Override
    protected void onCreate(SQLiteDatabase db) {
        super.onCreate(db);
        this.parentId = new ParentObject(id);  // 将id转换为ParentObject类型
    }
    

    以上就是一种可能的方法,允许你在父类的属性上添加额外的信息,但请注意,这并不影响HBM2DDL自动创建表的功能。

    评论

报告相同问题?