Не могу написать правильный запрос в spring-data - PullRequest
0 голосов
/ 05 июня 2018

Я работаю с подпружиненной загрузкой, и у меня есть эти 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.

Есть идеи, как написать этот запрос?

1 Ответ

0 голосов
/ 05 июня 2018

Во-первых, я предполагаю, что это spring-data-jpa с Hibernate в качестве базового значения.

Мой HQL немного ржавый, но что-то вроде этого должно работать:

select u from AppUser u inner join u.roles r inner join u.contrats c where r = :role and not exists ( from c.project p where p != :project)

Вот хорошая статья: http://www.codewrecks.com/blog/index.php/2010/03/09/power-of-hql-condition-on-a-collection/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...