【问题标题】:include into Lombok ToString field from another object从另一个对象包含到 Lombok ToString 字段中
【发布时间】:2017-03-07 13:27:31
【问题描述】:

我有这个 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,只打印一个字段。

谢谢

【问题讨论】:

    标签: java tostring lombok


    【解决方案1】:

    您有多种选择。

    1. 在 Company 中编写一个方法,根据需要对员工集进行序列化,然后要求 Lombok 排除“员工”并改用您的 getter。如果您不喜欢冗余字段的丑陋(见下文),这可不好。
    2. 为 Company 编写自定义 toString 方法。如果您想坚持使用 Lombok 解决方案,这并不好。
    3. 将员工的 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+"])";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2023-02-01
      相关资源
      最近更新 更多