Что делает Subquery в весенних данных? - PullRequest
0 голосов
/ 25 сентября 2019

Я должен преобразовать SQL-запрос в Спецификацию данных пружины. Во время поиска я замечаю класс Subquery, сначала : может кто-нибудь объяснить, что делает Subquery? секунда: может ли кто-нибудь помочь преобразовать этот запрос в Спецификацию данных Spring

запрос приведен ниже:

select distinct u from User u left join Operation o on (u.id = o.verificateur1 or u.id = o.verificateur2) where u.id not in (select op1.verificateur1 from Operation op1 where op1.id in (:ids)) and u.id not in (select op2.verificateur2 from Operation op2 where op2.id in (:ids));

Я написал этот код, новсе еще заблокирован, как присоединиться, используя Спецификацию

public class UserSpecification {

    public static Specification<User> UsersNotInSelectedOperations(final List<Long> usersId ){

        return new Specification<User>() {
            @Override
            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                final Path<User> users = root.get("id");
                return criteriaBuilder.not(users.in(usersId));
            }
        };
    }

}

Субъект пользователя

@Entity
@Table(name = "aigle_user")
public class User extends AbstractEntity implements UserDetails {

    private static final long serialVersionUID = 2840226091237599675L;

    @Column(name = "mail", nullable = true)
    private String mail;

    @Column(name = "password")
    private String password;

    @Column(name = "is_activated")
    private boolean isActivated;

    @Column(name = "is_admin")
    private boolean isAdmin;

    @ManyToMany(cascade = { CascadeType.PERSIST })
    @LazyCollection(LazyCollectionOption.FALSE)
    @JoinTable(name = "aigle_group_user", joinColumns = @JoinColumn(name = "fk_user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "fk_group_id", referencedColumnName = "id"))
    private Set<Group> groups;

    @ManyToMany(cascade = { CascadeType.PERSIST })
    @LazyCollection(LazyCollectionOption.FALSE)
    @JoinTable(name = "aigle_role_user", joinColumns = @JoinColumn(name = "fk_user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "fk_role_id", referencedColumnName = "id"))
    private Set<Role> roles;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "destinataire", orphanRemoval = true)
    private Set<Tache> taches;

    @Column(name = "last_name", unique = false)
    private String lastName;

    @Column(name = "first_name", unique = false)
    private String firstName;

    @Column(name = "telephone")
    private String telephone;

    private String salesforceId;

-----
}

Операционный объект

public class Operation extends OperationField {

...
    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
    @JoinColumn(name = "fk_user1_id")
    private User verificateur1;

    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
    @JoinColumn(name = "fk_user2_id")
    private User verificateur2;
.....
}

Я ожидаю, что спецификация заменит запрос выше

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