Java 为Entite使用基类是个好主意吗?
我读 关于hibernate实体的基类 现在,对于id、version、create_at、create_by等公共字段使用基类是一个好主意吗 hashcode和equals方法呢?我不喜欢在equals方法中使用id字段 有可能通过合成来解决这个问题吗?Java 为Entite使用基类是个好主意吗?,java,hibernate,Java,Hibernate,我读 关于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
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()
方法,而不从超类调用这些方法
资料来源: