我有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。在这种情况下,它只会为孩子返回一条记录。
建议。
答案 0 :(得分:0)
您有两种解决方案:
@OrderColumn
,但用正确的值填充:索引从0开始,以1递增(由于有sql脚本或从Java迁移了两步,因此迁移了数据)@OrderBy
注释:添加一个creation_date
列,在存储对象时将其填充(例如在存储库的create(ModelClass model)
方法中)并将其设置为默认值过去