2013-03-22 6 views
0

У меня есть подразделения Единица, сотрудник и я хочу иметь сопоставление со списком Employee in Unit.Объекты спящего режима, отображающие

Пример SQL:

select e.* 
from wfm.WFM_EMPLOYEE e 
    join wfm.wfm_position2unit p2u on p2u.UNIT_POSITION_ID=e.unit_position_id 
    join wfm.WFM_POSITION p on p.POSITION_ID=p2u.POSITION_ID 
    join wfm.wfm_unit u on u.UNIT_ID=p2u.UNIT_ID 
where u.unit_id = 337 

Теперь у меня есть доступ к работникам через 'вложенными' @OneToMany аннотаций:

В Unit:

@Entity 
@Table(name = "WFM_UNIT", schema = AppData.WFM_SCHEMA) 
public class Unit implements Serializable { 
    ... 
    @OneToMany(mappedBy = "unit", fetch = FetchType.EAGER) 
    private List<Position2unit> position2units; 
    ... 
} 

PositionToUnit:

@Entity 
@Table(name = "WFM_POSITION2UNIT", schema = AppData.WFM_SCHEMA) 
public class Position2unit implements Serializable { 
    ... 
    @ManyToOne(fetch = FetchType.LAZY, optional = true) 
    @JoinColumn(name = "POSITION_ID") 
    private Position position; 

    @ManyToOne(fetch = FetchType.LAZY, optional = true) 
    @JoinColumn(name = "UNIT_ID") 
    private Unit unit; 

    @OneToMany(mappedBy = "position2unit", fetch = FetchType.LAZY) 
    private List<Employee> employees; 
    ... 
} 

Сотрудник:

@Entity 
@Table(name = "WFM_EMPLOYEE", schema = AppData.WFM_SCHEMA) 
public class Employee implements Serializable { 
    ... 
    @NotFound(action = NotFoundAction.IGNORE) 
    @ManyToOne(fetch = FetchType.LAZY, optional = true) 
    @JoinColumn(name = "UNIT_POSITION_ID") 
    private Position2unit position2unit; 
    ... 
} 

ответ

1

Я думаю, что самым простым решением было бы добавить метод Единица измерения:

Collection<Employee> getEmployees() { 
    final Collection<Employee> employees = new HashSet<Employee>(); 
    for (final Position2unit p2u : position2units) { 
    employees.addAll(p2u.employees); 
    } 
    return employees; 
} 

и забыть о отображения в целом.

+0

в порядке. нет способа сделать это через картографирование? Благодарю. – yagodkin

+0

Да, конечно, есть. Но, на мой взгляд, это не имеет большого смысла. Потому что реализация этого сделает вещи намного более сложными. Например, чтобы синхронизировать его с другими отношениями. Для этого вам необходимо внедрить методы жизненного цикла. Если вы не наберете карту, вы всегда получите подходящих сотрудников для каждого подразделения. Или почему вы хотите, чтобы он был сопоставлен? (без сарказма) –

+0

Список сотрудников будет использоваться только для отображения данных без манипуляций. Картирование, более элегантный, я думаю. И поэтому я был просто интересен, нет принципиальной разницы между сопоставлением и методом. – yagodkin

Смежные вопросы