我已经揭示了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/
1条答案
按热度按时间fcg9iug31#
我认为post @DZone中的假设有一个根本性的问题,我认为他们将DTO(JPA)与应用程序模型中的“活动”对象混合在一起。
通过JPA进入或检索的实体是DTO @Value对象,而不是@Data对象。
应用程序应该将其“应用程序模型”Map到外部化的DTO,而不管它们是“REST DTO”还是“JPA DTO”。
对于比较更改的JPA get和保存,您不应该简单地更改DTO中的字段,因为数据库不知道这些字段。