#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)")
В спецификации соединение было таким же, но не работало