spring 实现equals和hashcode的最佳实践

lzfw57am  于 2023-02-11  发布在  Spring
关注(0)|答案(1)|浏览(148)

我已经揭示了Lombok中的@Data注解现在在我们使用JPAx 1 e0f1x时是一种糟糕的做法
那么,对于以下类,实现这些方法的最佳实践是什么?

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class User {
    @Id
    @NotNull
    private Long id;

    private String value;
}

可能是这个变种?

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class User {
    @Id
    @NotNull
    private Long id;

    private String value;

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o))
            return false;
        User that = (User) o;
        return id != null && Objects.equals(id, that.id);
    }

    @Override
    public int hashCode() {
        return getClass().hashCode();
    }
}

手工实现这样的方法需要测试覆盖率。有一些自动化的可能性吗?也许这个?https://jqno.nl/equalsverifier/

fcg9iug3

fcg9iug31#

我认为post @DZone中的假设有一个根本性的问题,我认为他们将DTO(JPA)与应用程序模型中的“活动”对象混合在一起。
通过JPA进入或检索的实体是DTO @Value对象,而不是@Data对象。
应用程序应该将其“应用程序模型”Map到外部化的DTO,而不管它们是“REST DTO”还是“JPA DTO”。
对于比较更改的JPA get和保存,您不应该简单地更改DTO中的字段,因为数据库不知道这些字段。

相关问题