我有这个 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,只有一个字段。
谢谢
您有多种选择。
- 在 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 识别 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(使用前将#替换为@)