如何在JPA/Hibernate中自动向“@OrderBy”映射列插入值?

如何在JPA/Hibernate中自动向“@OrderBy”映射列插入值?,hibernate,jpa,spring-data-jpa,Hibernate,Jpa,Spring Data Jpa,我有相关实体:一个用户->多个订单 @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = LAZY) private List<Order> orders; 但我不明白如何在保存过程中向序号插入正确的值。我创建用户,创建订单列表,向每个订单添加用户,并向用户添加列表订单。并保存用户。 基本方法-创建一个int变量,手动将其添加到每个订单和增量

我有相关实体:一个
用户
->多个
订单

    @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = LAZY)
    private List<Order> orders;
但我不明白如何在保存过程中向序号插入正确的值。我创建用户,创建订单列表,向每个订单添加用户,并向用户添加列表订单。并保存用户。 基本方法-创建一个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;
}
@ToString(exclude=“orders”)
@资料
@实体
@表(name=“users”)
公共类用户{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(name=“name”)
私有字符串名称;
@OrderColumn(name=“序号”)
@OneToMany(mappedBy=“user”,cascade={CascadeType.PERSIST,CascadeType.MERGE},fetch=LAZY)
私人名单订单;
}

OrderBy
用于对元素进行排序

假设您有一个
列表
,并且每个人都有一个名字,那么您将希望按名字对这些人进行排序

如果几个人有相同的名字,那么他们将在列表中相邻

如果你改变了一个人的名字,那么下次你得到这个名单时,这个人在名单中的位置将根据他的新名字而改变

你想要的显然不是那样,而是你想要在列表中保留订单的插入顺序。也就是说,有一个
列表
,它总是包含第一个顺序,然后是第二个顺序,然后是第三个顺序。如果你加上第四个,它应该总是在第四位


这就是原因。

例如,我需要保存10个用户。每个用户有5个订单。我想用订单保存第一个用户,其中每个订单在
ordinal_number
列1.2 3 4 5中都有值。并用订单1 2 3 4 5等保存第二个用户。好的,我将使用
OrderColumn
,但我的问题是-我可以自动将1 2 3 45值插入到
序号中吗?或者我需要手动添加?请阅读文档。第二句话是:持久性提供者负责在检索时维护数据库中的顺序。持久性提供程序负责在刷新到数据库时更新排序,以反映影响列表的任何插入、删除或重新排序。。因此,您可以在列表中添加顺序,或者修改列表的顺序,您的持久性提供程序(hibernate)将自动维护顺序。当我用
列表
保存
用户
时-
序号
列为空
@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;
}