2017-02-06 12 views
0

Итак, в этом примере сценария у меня есть DTO, а рабочий DTO, работники в этом контексте отделены отделом, а работник может быть только внутри одного отдела. Важно отметить, что Worker {id='123-123-123', department='a'} отличается от Worker {id='123-123-123', department='b'}, несмотря на то, что оба имеют один и тот же идентификатор.Спящий режим: повторная колонка при сопоставлении

у меня есть следующие настройки класса, чтобы попробовать и отдельные функции по id и department

public class IdAndDepartmentPK implements Serializable { 

    private String id; 
    private String department; 

    public IdAndDepartmentPK() {} 
    ... 
} 

Этот ключ класса разделяется между DTOS, которые требуют как Worker «s id и department, ниже приведены два DTOS, что вызывают проблему.

@Entity 
@IdClass(IdAndDepartmentPK.class) 
public class AttendencetDto { 

    @Id private String id; // This is a departmentally unique attendenceId 
    @Id private String department; 
    @Column private String workerId; 

    @JoinColumns({ 
     @JoinColumn(name = "workerId"), 
     @JoinColumn(name = "department") 
    }) 
    @ManyToOne(fetch = FetchType.EAGER) 
    private WorkerDto workerDto; 
    .... 
} 

@Entity 
@IdClass(IdAndDepartmentPK.class) 
public class WorkerDto { 

    @Id 
    private String id; 

    @Id 
    private String department; 
    ... 
} 

WorkerDto не нужно иметь знания AttendencetDto, но AttendencetDto, это нужно иметь доступ к WorkerDto и другие данные, которые он содержит.

Hibernate жалуется, что поля, такие как workerId, должны быть сопоставлены с insert = "false" update = "false", но если бы я должен был это сделать, я не смог бы сохранить эти значения в базе данных.

Я действительно хочу иметь эти поля, а также наличие WorkerDto, возможно ли это?

+1

Зачем вам нужен '@Column private String workerId;'? Вы можете связать свое предприятие с помощью workerDto. – ByeBye

+0

Но если у меня есть таблица 'attendence', например, с столбцом« worker_id », будет ли спящий режим вставлять данные туда без меня, указывая этот столбец в dto? – Dominic

+0

Если есть соединение с внешним ключом, вы можете просто установить «workerDto», и после того, как транзакция будет закрыта, ваши объекты будут связаны. – ByeBye

ответ

1

Вы должны удалить @Column private String workerId;, так как вы уже сопоставляете его по отношению к WorkerDto.

Если вы хотите создать связь между тем, вы должны использовать метод setWorkerDto в своем AttendencetDto и просто сохранить. После завершения транзакций вы будете иметь свои отношения в БД.

+0

Принимая этот ответ, потому что это правильное разрешение! – Dominic

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

  • Нет связанных вопросов^_^