【发布时间】:2018-11-29 10:35:33
【问题描述】:
我有 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”的列。它适用于在此更改后创建的记录,但对于以前的记录,该列为空,并导致以下异常:
org.hibernate.HibernateException: null index column for collection
我已尝试将列的默认值设置为 0。在这种情况下,它只为孩子返回一条记录。
请提出建议。
【问题讨论】:
-
OrderItem表中有 creation_date 列吗?如果是,您可以使用@OrderBy("creation_date")订购而无需添加列 -
不,我不知道。这就是为什么必须使用 orderColumn。
标签: java hibernate spring-boot jpa