У меня есть связанные объекты: Один User
-> много Orders
.
@OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = LAZY)
private List<Order> orders;
Я хочу получать заказанные заказы, когда выбираю пользователя и получаю от него все заказы.Я могу создать новое поле в таблице заказов ordinal_number
и добавить @OrderBy
аннотацию:
@OrderBy("ordinal_number")
@OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = LAZY)
private List<Order> orders;
Но я не понимаю, как можно вставить правильное значение в ordinal_number
во время сохранения.Я создаю пользователя, создаю список заказов, добавляю пользователя к каждому заказу и добавляю список заказов пользователю.И сохранить пользователя.Примитивный способ - создайте переменную int, добавьте ее вручную к каждому ордеру и увеличивайте.Но может быть есть какие-то способы сделать это автоматически?(например, добавить какой-нибудь генератор, автоинкремент или что-то другое)?
РЕДАКТИРОВАТЬ:
Мой класс заказа:
EqualsAndHashCode(exclude = "user")
@Data
@Entity
@Table(name = "orders")
public class Order {
@Id
private String id;
@Column(name = "name")
private String name;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "insert_date")
private Date insertDate = new Date();
@Column(name = "ordinal_number")
private Integer ordinalNumber;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private User user;
}
Мой класс пользователя:
@ToString(exclude = "orders")
@Data
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@OrderColumn(name = "ordinal_number")
@OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = LAZY)
private List<Order> orders;
}