更新父实体插入新条目

Updating a parent entity insert new entry

我有一个 EndangeredFish 实体扩展 Fish 具有 JOINED 继承类型的实体。

一段时间后,我们希望将 Fish 更新为 EndangeredFish(带有 numberOfSpeciesLeft 字段)。

Fish fish = fishRepository.findOne(fishId);
EndangeredFish endangeredFish = fishToEndangeredFish.apply(fish);

endangeredFish.setNumberOfSpeciesLeft(500);
endangeredFish.setId(fishId);

Fish updatedFish = fishRepository.save(endangeredFish);

这会在 ENDANGERED_FISH table 中插入一个新条目(正如预期的那样),而且 还会在 FISH table 中插入一个新条目,我不希望

我想知道我的案例是否适合实体继承,或者我应该只使用一个 FISH table 和 null numbOfSpeciesLeft 字段开始并稍后更新.

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Fish {
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    private Integer numOfFins;

    private String color;

    @ManyToOne
    @JoinColumn
    private Environment environment;

    @OneToMany
    @JoinColumn
    private String parts

}


@Entity
public class EndangeredFish extends Fish {
    Integer numOfFishLeft;
}

I wonder if my case is suited for entity inheritance or I should just use one FISH table with null numbOfSpeciesLeft field at the start and update it later.

不,这不适合继承。如果您有一个实例在其生命周期内基本上应该更改其类型,那么您使用的继承是错误的。

numbOfSpeciesLeftnull 值听起来是一个合理的开始。如果您有更多信息需要跟踪,它可能会演变成对 EndangermentInformation 的可选引用。这可以映射为一对一关系或可嵌入。