【发布时间】:2016-02-17 14:27:23
【问题描述】:
我有一个现有的 java 应用程序,我现在使用 spring-boot 和 data jpa 将一些数据保存在数据库中。在我现在转换为@Entity 的一类Order 中,我有一个成员是List<Position>。以下是缩减类的代码
@Entity
public class Order
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private List<Position> positions;
//some other members follow here...
}
@Entity
public class Position
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
//some members follow here...
}
所以我所做的如下,我在Order 的列表中添加了注释@Transient,并在Position 中添加了对订单的引用:
@Entity
public class Order
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@Transient
private List<Position> positions;
//some other members follow here...
}
@Entity
public class Position
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
@ManyToOne
private Order order;
//some members follow here...
}
现在,当我想保存一个 Order 对象时,我首先将 Order 保存在相应的存储库中,然后遍历 Positions 列表并在每个位置设置对 Order 的引用,然后将 Position 对象保存到其相应的存储库中。如果我想获取订单,那么我首先获取订单,然后使用findByOrder(..) 获取对应存储库中的职位。
到目前为止,这是可行的。现在我面临的问题是,如果应用程序在 Order 中修改了带有 Positions 的列表,并且我必须使用新的 Order 对象更新数据库,那么我找不到删除存储库中已删除的 Positions 的平滑解决方案应用程序的列表(因为我不再引用已删除的列表)。我可以先删除该订单的所有仓位,然后再次保存现有仓位。
所以我的问题是,是否有更好的方法来删除存储库中被应用程序删除的位置。但也许这将是一个 XY 问题,因为我的方法如何保存位置列表是我面临这个问题的原因。我感谢任何有关此的提示。
【问题讨论】:
-
"因为我如何保存位置列表的方法是我面临这个问题的原因。"确切地。唯一的问题是你为什么要这么做?
-
这个问题很容易回答:我不知道如何做得更好;-)
-
嗯,这是一个基本映射,所以我建议查看文档。下面的答案应该为您指明正确的方向。