Hibernate Mapping @Jointable

sebastianb

Erfahrenes Mitglied
Hallo Zusammen,

ich habe gerade in kleines Problem mit meinem Hibernate-Mapping und und finde einfach keine passende Lösung.

Was ich mache will ist ein relativ simples Mapping von 3 Entites.

Employee <> Project (M:N) => JoinTable EMP_PROJ

weiterhin habe ich eine Entity Activity, die zu Employee und Project in einer M:1 Verbindung steht. Deshalb wollte ich den ForeignKey von Acitivity ebenfalls mit in die oben genannte Join Tabelle aufnehmen, da eine Activity nur über die Employee - und Project id eindeutig referenziert werden kann.
Die Join Tabelle sollte nun ein zusammengesetzten PK aus den FKs zu Project und Employee enthalten und zusätzlich ein FK der Activity referenziert. Leider baut mir Hibernate die EMP_PROJ Tabelle aber so, dass der PK aus alle 3 FKs besteht.

So sollte es jedenfalls aussehen:
jointable.png


Hier noch mein Mapping

Employee:
Java:
@OneToMany(fetch = FetchType.LAZY)
@JoinTable(name = "EMP_PROJ", joinColumns = @JoinColumn(name = "EMPLOYEE_ID"), inverseJoinColumns = @JoinColumn(name = "ACTIVITY_ID", nullable = true))
@Column(nullable = true)
private Set<Activity> activities;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "EMP_PROJ", joinColumns = @JoinColumn(name = "EMPLOYEE_ID"), inverseJoinColumns = @JoinColumn(name = "PROJECT_ID"))
private Set<Project> projects;
Project:
Java:
@OneToMany( fetch = FetchType.LAZY)
@JoinTable(name = "EMP_PROJ", joinColumns = @JoinColumn(name = "PROJECT_ID"), inverseJoinColumns = @JoinColumn(name = "ACTIVITY_ID", nullable=true))
@Column(nullable=true)
private Set<Activity> activities;
   
@ManyToMany(mappedBy = "projects", fetch = FetchType.LAZY)
private Set<Employee> employees;

Activity:
Java:
@ManyToOne(fetch = FetchType.LAZY)
private Project project;

@ManyToOne(fetch = FetchType.LAZY)
private Employee employee;


Viele Dank für Eure Hilfe

Sebastian
 
Hallo Sebastian,

ich würde die beiden Schlüssel mit in die Activity Tabelle nehmen und aus der emp_proj Tabelle entfernen, zumal stell dir folgende Fragen:
- Wie viele Zeilen enthält die emp_proj Tabelle, wenn du ein Projekt mit einem Mitglied anlegst? 1
- Wie viele Zeilen enthält sie, nachdem Du 5 Activities angelegt hast? 5
- Wie viele Zeilen würdest Du bekommen, wenn du nur Projekte und Employees auflöst? Sollte 1 sein, wird aber 5 ergeben ...
- Warum ist das so?

Gruß Sen
 
Zurück