Чего я хочу добиться: упорядочить список Book
сущностей в отношении @OneToMany, в указанном атрибуте c после применения условия.
@Entity
public class Book{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "bookId")
private Long id;
@OneToMany(mappedBy = "entity", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
Set<RowOrder> orders;
}
@Entity
public class RowOrder {
@EmbeddedId
private RowOrderId id;
@ManyToOne
@MapsId("entityId")
@JoinColumn(name = "entity_id")
private Book entity;
@ManyToOne
@MapsId("userId")
@JoinColumn(name = "user_id")
private User user;
@Column(name = "entity_order")
private Long order;
}
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "userId")
private Long id;
}
Я хочу заказать books
по book.orders.order
, в котором order.userId == aUser.id
.
Я использую jpa.domain.Specification
, чтобы отфильтровать, в котором я хочу применить этот порядок.
@AllArgsConstructor
public class BookSpecification implements Specification<Book> {
...
@Override
public Predicate toPredicate(Root<Task> root, CriteriaQuery<?> criteriaQuery,
CriteriaBuilder criteriaBuilder) {
...
aUser ; // this the user entity in which i want to apply on the relation
criteriaQuery.orderBy(criteriaBuilder.asc(
root.join("orders", JoinType.LEFT) // <--- how to filter this with, WHERE row_order.user_id = aUser.id
.get("order"))
);
...
}
- как мне этого добиться?
- можно ли написать какой-нибудь нативный sql при использовании
CriteriaBuilder
? если да, то как мне написать причину OrderBy в моем случае с помощью natv ie sql?