gpt4 book ai didi

java - @orderColumn 的向后兼容性 : hibernate

转载 作者:搜寻专家 更新时间:2023-11-01 03:46:10 27 4
gpt4 key购买 nike

我有 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。在那种情况下,它只返回一个 child 的记录。

请提出建议。

最佳答案

你有两个解决方案:

  • 继续 @OrderColumn,但用正确的值填充它:索引从 0 开始,递增 1(迁移数据得益于 sql 脚本或从 java 的两步迁移)<
  • 继续使用 @OrderBy 注释:添加一个 creation_date 列,在存储对象时填充它(就像在 create(ModelClass model) 存储库的方法)并将其设置为过去的默认值

关于java - @orderColumn 的向后兼容性 : hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53537024/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com