让我们说我正在写一个JPA实体。非常简单。它有3个属性:
public class MenuItem {
@Id
@GeneratedValue
private Long menuItemId;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private Type type;
@OneToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "colorId")
private Color color;
}
现在,我想说我需要覆盖其equals
/ hashcode
方法。根据这个建议Implementing equals() and hashCode()我必须使用某种“商业密钥平等”。但我有疑问,我应该将此视为“业务”的关键。它是否必须是除ID
之外的所有属性,或Color
可以从中排除。对我来说似乎不太清楚。如果有人能够就此主题进行更多解释,将会感激不尽。
答案 0 :(得分:2)
参考文献中的最后一个陈述是纯金:
请注意,业务键不必像数据库一样稳固 主要候选人。不可变或独特的属性通常是好的 商业钥匙的候选人。
因此,在您的情况下,name
和type
将成为不错的候选人。假设Type是一个不可变对象(如果没有它,你仍然可以逃脱,但你可能会遇到一些难以发现的错误)。
如果您对color
设置了一个唯一约束,那么我也会考虑使用equals
/ hashCode
方法。