Ich habe 4 Personen und einem Tisch sitzen und ich möchte eine Abfrage wie folgt machen:Tabelle Join-Abfrage: Tabelle wird nicht abgebildet
Mitarbeiter:
@Entity
public class Collaborator implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(cascade = {CascadeType.MERGE,
CascadeType.DETACH,
CascadeType.REFRESH },
fetch = FetchType.EAGER)
@JoinColumn(name = "UserID", nullable = true)
private User user;
@ManyToOne(cascade = {CascadeType.MERGE,
CascadeType.DETACH,
CascadeType.REFRESH },
fetch = FetchType.EAGER)
@JoinColumn(name = "TaskID", nullable = true)
private Task task;
...}
Benutzer:
@Entity
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany(cascade = {CascadeType.MERGE,
CascadeType.DETACH,
CascadeType.REFRESH },
fetch = FetchType.EAGER)
@JoinTable(
name = "users_roles",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
private Set<Role> roles = new HashSet<>();
OneToMany(mappedBy="user", fetch = FetchType.EAGER)
private Set<Collaborator> collaborators = new HashSet<>();
...}
Rolle:
@Entity
public class Role implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = false)
private String name;
@JsonIgnore
@ManyToMany(mappedBy = "roles",fetch = FetchType.EAGER)
private Set<User> users;
... }
Aufgabe:
@Entity
public class Task implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "task", fetch = FetchType.EAGER)
private Set<Collaborator> collaborators = new HashSet<>();
...}
Mein Problem:
Ist ich Aufgaben nach Rolle holen will, und ich versuchte, diese Anfrage:
@Query("select t from Task as t, Collaborator as c, Role as r, User as u, users_roles as ur "
+ "where c.user = u.id "
+ "and u.id = ur.user_id "
+ "and r.id = ur.role_id "
+ "and r.name = :role "
+ "and c.task = t.id "
+ "and t.done = :done ")
List<Task> getTasksByRoleAndState(@Param("role")String role, @Param("done") boolean done);
aber ich habe ein Fehler:
users_roles is not mapped
Jeder Vorschlag sehr willkommen ist, Danke
Sie haben also keine ENTITY namens "users_roles", wie die Nachricht deutlich genug sagt. Und ? In JPQL verwenden Sie JOIN über RELATIONS hinweg. Du postest deine Kurse nicht, also wie kann jemand vorschlagen, was JOINs macht? JPQL! = SQL –
Meine Klassen sind dafür nicht erforderlich, und ich erwähnte, dass ich 4 Entitäten und 1 zusammenfügbar habe (es ist klar, dass ich eine vieleTomany-Beziehung habe) und erwähnte auch die JoinTableLinksRolle und BenutzerEntitäten. –
Mein Problem ist vielleicht die Frage: Wie kann ich auf eine Join-Tabelle von JPQL –