java - Lombok EqualsAndHashCode 与继承
问题描述
我想使用 lombok:EqualsAndHashCode 只考虑 Id,在 Item 类上设置,在层次结构之上。这些是我的课程: 1.Process:
@Data
@Entity
@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
@ToString(callSuper = true)
public class Process extends ResourceWithFlows {
@OneToOne
private Cost cost;
private UUID referenceProduct; //flowBaseId
private UUID processBaseId;
private UUID processTemplateId;
private boolean paretoApplied;
//ref
@ManyToOne
@JoinColumn(name = "fk_equipment")
private Equipment equipment;
@ManyToOne
@JoinColumn(name = "fk_production_line")
private ProductionLine productionLine;
@ManyToOne
@JoinColumn(name = "fk_company")
private Company company;
@ManyToOne
@JoinColumn(name = "fk_supply_chain")
private SupplyChain supplyChain;
}
2.ResourceWithFlows:
@Data
@Entity
@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
@ToString(callSuper = true)
public class ResourceWithFlows extends Resource {
@OneToMany
@JoinColumn(name = "fk_flow")
private Set<Flow> flows;
@OneToMany
@JoinColumn(name = "fk_elementary_flow")
private Set<ElementaryFlow> elementaryFlows;
}
3.项目:
@Data
@Entity
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@EqualsAndHashCode.Include
private UUID id;
private String name;
private LocalDateTime creationDate;
@Lob
private String description;
@OneToOne
private AuthUser creatorUser;
@PrePersist
void creationDate () {
this.creationDate = LocalDateTime.now();;
}
}
它是正确的还是有另一种方法来比较像进程这样的项目的子项?我在子项中使用了 callSuper=true 和 onlyExplicitlyIncluded=true ,在父项的 id 属性上设置了 @EqualsAndHashCode.Include ,但我不确定它是否正确。
解决方案
您所做的确实有效,但鉴于您的要求,这似乎完全没有必要。如果您只打算使用id
最顶层类中的字段来识别对象,则无需@EqualsAndHashCode
在层次结构中的任何地方应用。生成的方法Item
将适用于所有子类。