java - @orderColumn 的向后兼容性:hibernate
问题描述
我有 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。在这种情况下,它只返回一个孩子的记录。
请提出建议。
解决方案
你有两个解决方案:
- 继续,
@OrderColumn
但用正确的值填充它:索引从 0 开始,递增 1(迁移您的数据,这要归功于 sql 脚本或从 java 的两步迁移) - 继续
@OrderBy
注释:添加一creation_date
列,在存储对象时填充它(如在create(ModelClass model)
存储库的方法中)并将其设置为过去的默认值
推荐阅读
- node.js - 纽曼上的 NTLM 身份验证
- javascript - 如何将字符串转换为 12 位二进制而不改变它在 asp.net c# 中的值
- c# - C# 在类的新实例中使用 Forms 元素
- c++ - 如何在不使用“开发工具”组的情况下通过 yum 命令安装 c++?
- python - 描述快速排序算法
- reactjs - React Router ALL LINK IS WORKING FINE EXPECT to="/" 不起作用,我想访问另一个路径="/"
- c - 不同的写作,同样的事情:一个给出分段错误,另一个没有
- html - 弹出/模态层
- esp8266 - Thing speak 使用 esp8266 和 Arduino Uno 接收到的并非所有来自 Arduino 串口的数据。你能回答吗
- cloud - 解释云服务