我有这个 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,只打印一个字段。
谢谢
最佳答案
您有多种选择。
- 在 Company 中编写一个方法,根据需要序列化员工集,然后要求 Lombok 排除“员工”并改用您的 getter。如果您不喜欢冗余字段的丑陋(见下文),这就不好了。
- 为 Company 编写一个自定义的 toString 方法。如果您想坚持使用 Lombok 解决方案,这可不好。
- 将 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/