当前位置: 首页 > 知识库问答 >
问题:

龙目岛等于和哈希代码与继承

高茂
2023-03-14

我想使用lombok:EqualsAndHashCode,只考虑Id,设置在Item class上,在分层结构之上。这些是我的课程: 1.流程:

@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.资源流动:

@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();;
    }

}

这是正确的还是有其他方法可以通过Id来比较像Process这样的项的子项?我在孩子中使用了callSuper=true和onlyExplicitlyIncluded=true,设置了@EqualsAndHashCode。包含父项的id属性,但我不确定它是否正确。

共有1个答案

欧照
2023-03-14

您所做的确实有效,但鉴于您的要求,似乎完全没有必要。如果您只打算使用最顶层类中的id字段来识别对象,则无需在层次结构中的任何位置应用@EqualsAndHashCode项目中生成的方法将适用于所有子类。

 类似资料:
  • 我有一个类BaseEntity: 和一个扩展类: 我正在尝试使用生成器构建播种机: 我希望Lombok使用基类baseEntity在BreedEntity中创建一个构造函数。 我读了留档,当我删除@实体anotation SuperBuilder文档时,它工作得很好 有人能更详细地解释为什么会发生这种情况吗?

  • 我试着在IntelliJ上使用Lombok和Maven和VRaptor,但它不起作用。 我已经在stackoverflow中阅读了一些信息,但没有解决我的问题,我已经在Intellij中启用了注释处理器,但仍然一无所获。 我也试图从命令行(Windows)编译它,但没有成功。 我还尝试在没有maven的情况下创建另一个项目,添加库,创建一些用于测试的类,它可以完美地工作、编译和运行。 有什么帮助吗

  • 我在Intellij遇到了一个奇怪的问题。我正在使用Lombok(1.18.2)、IntelliJ(2018.2.2)和JUnit 5在gradle 4多模块项目中。 我花了好几个小时来复制这个。 > 运行所有具有覆盖率测试用例。 移除龙目镜并在此之后生成吸气剂和定型剂也没有效果。 尝试了一切来解决这个问题(启用注释处理器、Lombok插件、清理构建),但没有成功。 编辑1: Root build

  • 我在gradle项目中使用lombok,希望创建一个jar文件,但每次我执行jar任务(无论是在控制台还是eclipse ide中触发)时,我都会发现错误,我的lombok导入在我使用lombok注释的类中找不到。输出示例: 搜索了一段时间后,我发现有一个适用于gradle和lombok的插件,但在使用较新的gradle版本编译时并不真正需要。我的gradle版本是3.4.1和lombok 1.6

  • 问题内容: 我正在尝试向使用Lombok的现有Java Maven项目添加常规功能。不幸的是,当我用下面的pom片段启用groovy-maven- eclipse编译器时,我的带有lombok注释的Java文件无法编译。据我所知,Lombok根本不参与Java文件的编译。 我还应该指出,在eclipse中(使用m2e)一切正常。当我尝试执行mvn软件包时,会出现我的问题。 问题答案: @Todd:

  • Lombok@Data annotation将在带注释的类上无声地添加字段的setter和getter。 如何在龙目岛添加基于条件的setter? lombok中有没有这样的支持 我已经在龙目岛文件中搜索了,我没有看到关于我的问题的解释。