@orderColumn的向后兼容性:休眠

时间:2018-11-29 10:35:33

标签: java hibernate spring-boot jpa

我有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。在这种情况下,它只会为孩子返回一条记录。

建议。

1 个答案:

答案 0 :(得分:0)

您有两种解决方案:

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