当前位置: 首页 > 知识库问答 >
问题:

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

司徒捷
2023-03-14

我有这个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?我不想打印整个对象雇员,只是一个字段。

非常感谢。

共有1个答案

皇甫夕
2023-03-14

你有几个选择。

  1. 在Company中编写一个方法,根据需要序列化员工集,然后让Lombok排除“employee”并使用getter。如果您不喜欢冗余字段的丑陋(见下文),那么这是不好的
  2. 为公司编写自定义toString方法。如果你想坚持龙目山的解决方案,这是不好的
  3. 将ToString of Employee设置为仅使用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+"])";
    }
}
 类似资料:
  • 嗨,我有两个对象列表。清单1和清单2 App1中的员工列表 在sql中,我们可以很容易地通过ID列进行连接。但是这里要点击seperate API来阅读清单2。 我可以从清单2创建map,并将EmpId作为键,继续从map获取对象,并将详细信息设置到清单1。 想知道有没有更好的方法来做这件事。

  • 我有像下面这样的课。 我通过Restendpoint获取此对象。问题是,当字段passPayer和driver对象相等时,在返回的JSON中,driver字段只包含ID(它只是一个整数值),passPayer字段包含所有对象字段。 当这些字段具有不同的对象时,两个字段都显示如下所示的完整详细信息。 我需要两个对象都包含数据(字段。[id,firstName,lastName,idNo]),无论它们

  • 这是我完整的logcat: 在Android.support.v4.app.backStackRecord.doaddop(backStackRecord.java:414)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:449)在Android.support.v4.app.backStackRecord.

  • 我试图通过JS对象(1)来找出另一个对象(2)上是否存在值,并返回对象(2)的find值。 在这种情况下,我只能通过得到真/假来找出它是否存在,我也试过这个 但是在这种情况下,它只返回空数组,而不是对象(1)值找到的对象(2)值

  • 最近一个面试官问了我一个很棘手的问题。这个问题有几个部分。 为什么(问题是为什么,而不是如何)需要在从一个活动发送到另一个活动时打包对象,而不是直接发送 我给的答案- Parcelable为开发人员提供了限制对象创建的能力,这在某种程度上使其使用速度更快。 我没有得到任何有用的链接后,谷歌,而且我或面试官不太满意的答案。如果你们能帮忙,那就太好了!

  • 问题内容: 所以我有: 是否有一条sql语句将所有内容从id复制到number? 我将要编写一个php scrip进行选择,然后更新每一行。我的SQL知识很基础,但是我敢肯定有一个聪明的方法可以做到这一点: 背景:ID过去一直是应用程序中显示的数字,并且是唯一的。该数字在我要添加的一些新功能中不再是唯一的-因此我需要将其移动到不唯一的字段中,同时保持旧的完整性。 问题答案: 您可以使用更新语句并引