我有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)
方法中),并将其设置为过去