我有这个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 ? 我不想打印整个对象员工,只打印一个字段。
谢谢
答案 0 :(得分:2)
您有几种选择。
方法(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+"])";
}
}