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

2024-01-19

我有这个 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;
}

我怎样才能打印id从对象employee? 我不想打印整个对象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 识别 getter。然而,该字段本身从未被使用过。我承认,这很丑陋,尽管这两个领域都是私有的,这在一定程度上缓解了这一问题。

方法(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+"])";
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从另一个对象包含到 Lombok ToString 字段中 的相关文章

随机推荐