Zuerst dachte ich, this solution mein Problem lösen könnte:ManyToManyToMany - Joining drei Tabellen mit Hibernate Annotations
@Entity
public class User {
@JoinTable(name = "user_permission",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "permission_id"))
@MapKeyJoinColumn(name = "project_id")
@ElementCollection
private Map<Project, Permission> permissions = new HashMap<>();
}
@Entity
public class Project {
...
}
@Entity
public class Permission {
...
}
Aber in dieser Implementierung kann es nur einen Permission
Satz sein pro Project
. Ich mag die Fähigkeit erreichen, mehrere Berechtigungen für ein Projekt so einzustellen, dass die folgenden Bedingungen erfüllt sein:
| user_id | project_id | permission_id |
|---------|------------|---------------|
| 1 | 1 | 1 |
|---------|------------|---------------|
| 1 | 1 | 2 |
|---------|------------|---------------|
| 1 | 2 | 1 |
|---------|------------|---------------|
| 1 | 2 | 2 |
|---------|------------|---------------|
| 2 | 1 | 1 |
|---------|------------|---------------|
| 2 | 1 | 2 |
|---------|------------|---------------|
| 2 | 2 | 1 |
|---------|------------|---------------|
| 2 | 2 | 2 |
Wenn der Schlüssel/Wert einer Karte sind Einheiten, dann ist das keine ElementCollection; es benötigt ManyToMany gemäß der JPA-Spezifikation –