我有2个具有oneToMany关系的实体。我想维护子实体的插入顺序。我为此使用@orderColumn。码:

家长班:

@Entity
public class Order{

  private String orderId;

  @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
  @NotEmpty
  @OrderColumn
  private List<OrderItem> orderItems = new ArrayList<>();
}

子班:
@Entity
public class OrderItem{

  @Id
  private String orderItemId;
  @ManyToOne
  @JoinColumn(name = "order_id", nullable = false)
  private Order order;
}

我在这里面临的问题是orderColumn不向后兼容。也就是说,它在子表中添加了一个名称为“order_item_order”的列。对于此更改后创建的记录,它工作正常,但对于先前的记录,该列为null并导致以下异常:
org.hibernate.HibernateException: null index column for collection

我尝试将列的默认值设置为0。在这种情况下,它仅返回一个孩子的记录。

请提出建议。

最佳答案

您有两种解决方案:

  • 继续使用@OrderColumn,但用正确的值填充:索引从0开始,以1为增量(由于sql脚本或从Java迁移了两步而迁移了数据)
  • 继续进行@OrderBy批注:添加creation_date列,在存储对象时填充它(例如在存储库的create(ModelClass model)方法中),并将其设置为过去
  • 的默认值

    09-12 19:00