java - 从另一个对象包含到 Lombok ToString 字段中

标签 java tostring lombok

我有这个 POJO

//@ToString(of = { "id", "name", "employee.id - not working" })
@ToString(of = { "id", "name", "employee - working" })
public class Company {

    private int id;
    private String name;

    @OneToMany(mappedBy="company")
    private Set<Employee> employee;
}

public class Employee{

    private int id;
    private String name;

    @ManyToOne
    private Company company;
}

如何从对象employee 中打印id? 我不想打印整个对象 employee,只打印一个字段。

谢谢

最佳答案

您有多种选择。

  1. 在 Company 中编写一个方法,根据需要序列化员工集,然后要求 Lombok 排除“员工”并改用您的 getter。如果您不喜欢冗余字段的丑陋(见下文),这就不好了。
  2. 为 Company 编写一个自定义的 toString 方法。如果您想坚持使用 Lombok 解决方案,这可不好。
  3. 将 Employee 的 ToString 设置为仅使用 id。如果您想在其他地方打印其余的 Employee 字段,这是不好的。

方法 (1) 的示例:

@ToString(of = {"id", "name", "employeeIdList"})
public class Company {

    private int id;
    private String name;

    @OneToMany(mappedBy="company")
    private Set<Employee> employee;

    private Set<Integer> employeeIdList; // unused field
    private Set<Integer> getEmployeeIdList() {
            // Return a set of employee ids only
            return employee.stream()
                .map(e -> e.getId()).collect(Collectors.toSet());
    }
}

请注意,为了让 Lombok 识别 setter/getter ,您需要拥有该字段。但是,该字段本身从未被使用过。我承认,这很丑陋,尽管这两个字段都是私有(private)的可以部分缓解这种情况。

方法 (2) 的示例:

public class Company {

    private int id;
    private String name;

    @OneToMany(mappedBy="company")
    private Set<Employee> employee;

    @Override
    public String toString() {
            String ids = "";
            for (Employee e : employee) {
                if (! ids.isEmpty())
                    ids += ", ";
                ids += e.getId();
            }
            return "Company(id="+id+", name="+name+", employees=["+ids+"])";
    }
}

关于java - 从另一个对象包含到 Lombok ToString 字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42649564/

相关文章:

java - JSON值类型是否需要严格定义?

java - mcrypt(在 PHP 中)在 Java 中使用的任何等效项?

java - Noclassdeffounderror - 找不到 v7 支持(android studio)

java - 与 @Builder 结合使用时,我无法让 @RequiredArgsConstructor 工作

java - Lombok 未创建默认构造函数导致 jackson-databinding 失败

java - 是否有理由不在 android studio 中使用 lombok

java - DDMS 分配跟踪器填充了 "SimpleListIterator"

PHP 扩展 : convert an object to string with __toString()

java - 尝试通过 toString() 打印对象

c# - 转换 ToString 时从指数中删除前导零