Java 为Entite使用基类是个好主意吗?

Java 为Entite使用基类是个好主意吗?,java,hibernate,Java,Hibernate,我读 关于hibernate实体的基类 现在,对于id、version、create_at、create_by等公共字段使用基类是一个好主意吗 hashcode和equals方法呢?我不喜欢在equals方法中使用id字段 有可能通过合成来解决这个问题吗? 缺点是什么?虽然对实体使用基类有很多用途,但对于映射公共字段,我宁愿嵌入: 使用公共字段定义一个类,并将其标记为 在包含的实体中,添加对“Embeddeble”类的引用,并将该引用标记为或(无论适用什么) 如果适用,请使用附加或标记引用以自定

我读 关于hibernate实体的基类

现在,对于id、version、create_at、create_by等公共字段使用基类是一个好主意吗

hashcode和equals方法呢?我不喜欢在equals方法中使用id字段

有可能通过合成来解决这个问题吗?
缺点是什么?

虽然对实体使用基类有很多用途,但对于映射公共字段,我宁愿嵌入:

  • 使用公共字段定义一个类,并将其标记为
  • 在包含的实体中,添加对“Embeddeble”类的引用,并将该引用标记为或(无论适用什么)
  • 如果适用,请使用附加或标记引用以自定义映射
  • 我看到的主要问题(链接帖子中使用的方法)是,每个实体只能有一个超类。这在许多用例中可能是好的,但对于最复杂的用例来说,它太死板了。嵌入使您能够灵活地组合任意多个
    @embeddeble
    s。取舍是它不透明。如果你有:

    select u.streetname from User u
    
    然后将
    streetname
    移动到嵌入的
    地址
    ,现在您必须执行以下操作:

    select u.address.streetname from User u
    

    最后,如果你知道你的模型很简单,
    @MappedSuperclass
    会起作用。如果您有一个复杂的模型,您可以从
    @Embedded
    @Embedded
    中获益,而为实体使用基类有很多用途,对于映射公共字段,我宁愿通过嵌入:

  • 使用公共字段定义一个类,并将其标记为
  • 在包含的实体中,添加对“Embeddeble”类的引用,并将该引用标记为或(无论适用什么)
  • 如果适用,请使用附加或标记引用以自定义映射
  • 我看到的主要问题(链接帖子中使用的方法)是,每个实体只能有一个超类。这在许多用例中可能是好的,但对于最复杂的用例来说,它太死板了。嵌入使您能够灵活地组合任意多个
    @embeddeble
    s。取舍是它不透明。如果你有:

    select u.streetname from User u
    
    然后将
    streetname
    移动到嵌入的
    地址
    ,现在您必须执行以下操作:

    select u.address.streetname from User u
    

    最后,如果你知道你的模型很简单,
    @MappedSuperclass
    会起作用。如果您有一个复杂的模型,您可以从
    @Embedded
    @Embedded
    中获益,如果您仅在单个会话中使用附加实例,则不必实现
    hashCode()
    equals()
    。因为在这种情况下,每行始终只有一个实例

    您还可以在子类中编写自己的
    hashCode()
    equals()
    方法,而不从超类调用这些方法


    来源:,

    如果您仅在单个会话中使用附加实例,则不必实现
    hashCode()
    equals()
    。因为在这种情况下,每行始终只有一个实例

    您还可以在子类中编写自己的
    hashCode()
    equals()
    方法,而不从超类调用这些方法

    资料来源: