Also in diesem Beispiel Szenario habe ich eine Anwesenheit DTO, und ein Arbeiter DTO, Arbeiter in diesem Zusammenhang sind nach Abteilung getrennt, und ein Arbeiter kann immer nur innerhalb einer Abteilung sein. Es ist wichtig zu beachten, dass sich Worker {id='123-123-123', department='a'}
von Worker {id='123-123-123', department='b'}
unterscheidet, obwohl beide die gleiche Id teilen.Hibernate: wiederholte Spalte in Mapping
Ich habe die folgende Klasse Setup und separate Funktionen zu versuchen, durch id
und department
public class IdAndDepartmentPK implements Serializable {
private String id;
private String department;
public IdAndDepartmentPK() {}
...
}
Diese Schlüsselklasse zwischen DTOs geteilt wird erfordern, dass sowohl die Worker
‚s id
und department
, unter den beiden DTOs sind, dass verursachen ein Problem.
@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
benötigt keine Kenntnisse von AttendencetDto
zu haben, aber AttendencetDto
, muss Zugang zu WorkerDto
haben und die anderen Daten, die er enthält.
Hibernate beschwert sich, dass Felder wie workerId
mit insert = "false" update = "false" zugeordnet werden sollten, aber wenn ich dies tun würde, wäre ich nicht in der Lage, diese Werte in der Datenbank zu erhalten.
Ich möchte im Wesentlichen diese Felder verfügbar haben, während auch die WorkerDto
zur Verfügung steht, ist das möglich?
Warum brauchen Sie '@Column private String workerId;'? Sie können Ihre Entität mit workerDto verknüpfen. – ByeBye
Aber wenn ich zum Beispiel die Tabelle 'attention' mit der Spalte 'worker_id' habe, würde Hibernate die Daten dort einfügen, ohne dass ich diese Spalte im dto spezifiziere? – Dominic
Wenn es eine Verbindung zu einem Fremdschlüssel gibt, können Sie einfach 'workerDto' einstellen und nach dem Schließen der Transaktion werden Ihre Entitäten verknüpft. – ByeBye