JOOQ如何自助加入

JOOQ how to self join

现在我的代码如下所示:

EmployeeTable employee = EMPLOYEE.as("employee");
EmployeeTable boss = EMPLOYEE.as("boss");

Map<Employee, Employee> result = dslContext.select(employee.fields())
        .from(employee)
        .join(boss)
        .on(employee.BOSS_ID.eq(boss.ID))
        .fetch()
        .intoMap(Employee.class, Employee.class);

我需要获得 Map 形式的 <Employee(employee), Employee(boss)>。也就是说,key是一个员工,value是他的老板。但是执行代码的结果是返回了一个Map,其中key和value都是老大。我该如何解决这个问题?

你必须解决两件事:

  1. 投影所有列,包括 "boss" table,而不仅仅是 "employee" table 的
  2. 使用正确的intoMap(Table, Table)重载

即:

Map<Employee, Employee> result = 
dslContext.select() // Just leave this empty, or project everything explicitly
          .from(employee)
          .join(boss)
          .on(employee.BOSS_ID.eq(boss.ID))
          .fetch()
          .intoMap(employee, boss);