JPA实体,识别业务密钥

时间:2017-03-28 12:21:45

标签: java jpa orm

让我们说我正在写一个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可以从中排除。对我来说似乎不太清楚。如果有人能够就此主题进行更多解释,将会感激不尽。

1 个答案:

答案 0 :(得分:2)

参考文献中的最后一个陈述是纯金:

  

请注意,业务键不必像数据库一样稳固   主要候选人。不可变或独特的属性通常是好的   商业钥匙的候选人。

因此,在您的情况下,nametype将成为不错的候选人。假设Type是一个不可变对象(如果没有它,你仍然可以逃脱,但你可能会遇到一些难以发现的错误)。

如果您对color设置了一个唯一约束,那么我也会考虑使用equals / hashCode方法。