在超类中声明公共属性并稍后在其他类中扩展它是一种很好的方法吗?

时间:2015-08-25 03:22:38

标签: java hibernate

我有一些属性,比如在大多数POJO中常见的createdDate,createBy,modifiedDate,modifiedBy,deletedDate,deletedBy。

我可以在超类中声明这些属性,然后在其他类中扩展它...... ??

3 个答案:

答案 0 :(得分:2)

是的,你可以。我不明白为什么你至少不能自己尝试。

public class Base {
    protected Date createdDate;
    public Base() {
        createDate = new Date();
    }
}

public class SubClass extends Base {
    public SubClass() {
        // you can access createdDate here
    }
}

答案 1 :(得分:0)

是的。但你需要小心。

因为在这种情况下,在这些字段对相等性有显着贡献的情况下,覆盖equals和hashcode几乎成为强制性的。 如上所述here

也有一些副作用

答案 2 :(得分:0)

正如大家所解释的那样,这在继承视图中是完全有效的。既然你已经添加了hibernate标签,你对数据库中列的意图是什么? 您是否需要将这些属性存在于公共父表中,或者您希望在每个单独的表中添加这些属性。 您需要使用选择正确的继承策略 @Inheritance(策略= InheritanceType) 或者您也可以考虑使用没有自己的数据库表的映射超类。您可以使用@MappedSuperclass注释来注释此类。

此致 Asheesh