Я сталкиваюсь с этой проблемой, пытаясь получить список родителей с отфильтрованными детьми. В моем приложении пользователи могут создавать корзины, и за каждую корзину они будут получать одну или несколько комиссионных после оплаты. Когда я пытаюсь получить тележки с соответствующими комиссиями, JPA получает мне тележки со всеми их комиссиями, если среди них есть мои пропущенные user_id
.
// Cart Entity
@Entity
public class Cart {
@Id
private Long id;
@OneToMany(mappedBy = "cart", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Commission> commissions = new HashSet<>();
}
// Commission Entity
@Entity
public class Commission {
@Id
private Long id;
@JsonIgnore
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "cart_id", nullable = false)
private Cart cart;
@JsonIgnore
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name = "user_id", nullable = false)
private User user;
}
// Cart Repository
public interface CartRepository extends JpaRepository<Cart, Long> {
Page<Cart> findDistinctByCommissions_User_Id(Long id, Pageable pageable);
}
В базе данных:
CART
|--------------|------------------|
| id | description |...
|--------------|------------------|
| 1 | .... |...
|--------------|------------------|
| 2 | .... |...
|--------------|------------------|
| 3 | .... |...
|--------------|------------------|
COMMISSIONS
|--------------|------------------|------------------|
| id | cart_id | user_id |...
|--------------|------------------|------------------|
| 1 | 1 | 1 |...
|--------------|------------------|------------------|
| 2 | 1 | 1 |...
|--------------|------------------|------------------|
| 3 | 1 | 1 |...
|--------------|------------------|------------------|
| 4 | 1 | 2 |...
|--------------|------------------|------------------|
То, что я звоню:
@GetMapping
Page<Cart> getByUserId(Long id, Pageable pageable) {
return cartRepository.findDistinctByCommissions_User_Id(id, pageable); // 1
}
Что я получаю:
{
"content":[
{
id: 1,
commissions: [ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 } ]
}
],
...
}
Что я хочу (исключая комиссию 4, которая не связана с пользователем 1):
{
"content":[
{
id: 1,
commissions: [ { id: 1 }, { id: 2 }, { id: 3 } ]
}
],
...
}
Спасибо