2017-03-07 40 views
1

我有對象員工這個POJO的包括到龍目島的ToString場從另一個對象

//@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? 我不想打印整個對象員工,只有一個字段。

謝謝

回答

2

您有幾個選擇。

  1. 在公司編寫一個方法,根據您的喜好將員工序列化,然後要求Lombok排除「員工」並改爲使用您的getter。如果你不喜歡有冗餘字段的醜陋,這是不好的(見下文)。
  2. 爲公司編寫自定義toString方法。如果你想堅持龍目島解決方案,這是不好的。
  3. 將ToString設置爲僅使用id。如果您希望在其他地方打印員工字段的其餘部分,這是不好的。

的方法(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()); 
    } 
} 

注意。但是,該領域本身從未被使用過。我承認,這很醜陋,儘管這兩個領域都是私人化的。

的方法的一個例子(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+"])"; 
    } 
}