Критерии Api-соединения возвращают во многие записи

#spring #hibernate #jpa #spring-data-jpa #spring-data

Вопрос:

У меня есть три сущности

 @Entity
@Table(name="")
@Data
@Builder
@EqualsAndHashCode(callSuper=false)
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class User extends implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @OneToMany(mappedBy="user")
    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    private List<ContractorUser> contractorUsers;
    
}

@Entity
@Table(name="")
@Data
@Builder
@EqualsAndHashCode(callSuper=false)
@AllArgsConstructor
@NoArgsConstructor
public class ContractorUser implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(name="")
    private LocalDateTime effectiveDateTo;

    @EqualsAndHashCode.Exclude
    @ManyToOne
    @JoinColumn(name="")
    private User user;
    
    @OneToMany(mappedBy="contractorUser")
    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    private List<UserDocument> userDocuments = new ArrayList<>();

}

@Entity
@Table(name="")
@Data
@Builder
@EqualsAndHashCode(callSuper=false)
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class UserDocument implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    @Column(name="")
    private LocalDateTime dateTo;
    
    @ManyToOne
    @JoinColumn(name="")
    private ContractorUser contractorUser;

}
 

У пользователя может быть много пользователей-подрядчиков, у этого пользователя-подрядчика может быть много документов пользователя .
Я хочу получить пользователя, но не с полными данными, которые существуют в базе данных.
Я хочу, чтобы пользователь получал только с пользователями-контракторами, которые являются пользователями-контракторами.Эффективно, чтобы это было больше, чем сейчас, или равно нулю, и пользователи-контракторы получают только документы пользователей, которые используют документы.Дата, которая тоже должна быть больше, чем сейчас.Когда я попадаю в репозиторий jpa, но получаю все данные в документах пользователей и пользователей-подрядчиков.
Я попытался в спецификации в разделе «Условие добавления соединения в клаузуле» или в строковом запросе jpql добавить условие, но в результате всегда получаются все данные.
Как я могу отфильтровать полученные данные?

jpql-запрос

 @Query("select user from User user"  
            "left join fetch user.contractorUsers contractorUsers"  
            "where user.id = :id and "  
            "(contractorUsers.effectiveDateTo is null or contractorUsers.effectiveDateTo > CURRENT_TIMESTAMP)")
 

В спецификации соединение было таким же, но не работало