Я работаю с подпружиненной загрузкой, и у меня есть эти 3 энтита:
Entity AppUser
@Entity
@Data
@AllArgsConstructor @NoArgsConstructor
public class AppUser implements Serializable {
@Id @GeneratedValue
private Long id;
@Column(unique = true)
private String username;
private String password;
private String prenom;
private String nom;
private Long tel;
private String cin;
private String email ;
@ManyToMany(fetch = FetchType.EAGER)
private Collection<AppRole> roles = new ArrayList<>();
@OneToMany(mappedBy = "appUser" )
@Fetch(value = FetchMode.SUBSELECT)
@JsonManagedReference(value="appuser-contrat")
private Collection<Contrat> contrats = new ArrayList<Contrat>();
public void addToContrats(Contrat contrat){
this.contrats.add(contrat);
}
}
Контраст Entity
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Contrat implements Serializable{
@Id @GeneratedValue
private Long id;
private Date dateDebut ;
private Date dateFin ;
private Long idDevloppeur;
@ManyToOne
@JoinColumn(name = "Id_Project")
@JsonBackReference(value="projet-contrat")
private Project project;
@ManyToOne
@JoinColumn(name = "Id_AppUser")
@JsonBackReference(value="appuser-contrat")
private AppUser appUser;
}
Entity Project
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Project implements Serializable{
@Id @GeneratedValue
private long id;
private String intitule;
private String description;
@OneToMany(mappedBy = "project" )
@Fetch(value = FetchMode.SUBSELECT)
@JsonManagedReference(value="projet-contrat")
private Collection<Contrat> contrats = new ArrayList<Contrat>();
public void addToContrats(Contrat contrat){
this.contrats.add(contrat);
}
}
это отображение, которое я использую:
-One_to_many между AppUser и Contrat.
-One_to_many между Project и Contrat.
Таким образом, Contrat находится посередине между AppUser и Project.
Я пытаюсь в репозитории написать запрос, чтобы получить список AppUser, у которого нет указанного проекта.
Я пробовал это
@Query("select u from AppUser u inner join u.roles r inner join u.contrats c where r = :role and c.appUser not in (" +
"select d.appUser from Contrat d where d.project = :project )")
Итак, я хочу получить список пользователей, у которых нет этого проекта ': project'
, но я получаю пустоеlist, в то время как я должен получить список всех AppUsers, так как в моем приложении еще нет проекта для любого appuser.
Есть идеи, как написать этот запрос?