【问题标题】:SpringData cascade updateSpring Data 级联更新
【发布时间】:2017-08-12 16:59:41
【问题描述】:

这是第一个实体:

    @Entity
@Table(name = "photographers")
public class Photographer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @NotNull
    @Column(name = "first_name")
    private String firstName;

    @NotNull
    @Size(min = 2, max = 50)
    @Column(name = "last_name")
    private String lastName;

    @Pattern(regexp = "^\\+[0-9]{1,3}/[0-9]{8,10}$")
    private String phone;

    @NotNull
    @OneToOne(optional = false)
    @JoinColumn(name = "primary_camera_id", referencedColumnName = "id")
    private BasicCamera primaryCamera;

    @NotNull
    @OneToOne(optional = false)
    @JoinColumn(name = "secondary_camera_id", referencedColumnName = "id")
    private BasicCamera secondaryCamera;

    @OneToMany(mappedBy = "owner")
    private Set<Lens> lenses;

    @OneToMany(mappedBy = "owner")
    private Set<Accessory> accessories;

这是另一个(镜头):

@Entity
@Table(name = "lenses")
public class Lens {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String make;

    @Column(name = "focal_length")
    private Integer focalLength;

    @Column(name = "max_aperture", precision = 1)
    private Double maxAperture;

    @Column(name = "compatible_with")
    private String compatibleWith;

    @ManyToOne
    @JoinColumn(name = "owner_id", referencedColumnName = "id")
    private Photographer owner;

首先,我有没有所有者的镜头。然后我想用所有东西创建一个摄影师并将其镜头设置为现有的我使用以下代码执行此操作:

 for (Lens lens : lensSet) {
            lens.setOwner(photographer);
        }

        photographer.setPrimaryCamera(primaryCamera);
        photographer.setSecondaryCamera(secondaryCamera);
        photographer.setLenses(lensSet);

当我保存摄影师时,我希望将镜头所有者设置为创建的。我在摄影师实体中的 OneToMany 实现上尝试了 cascad.MERGE,但没有奏效,并且在数据库中所有镜头所有者仍然为空

【问题讨论】:

  • 你能在这里发布错误日志吗?
  • 实体保存在数据库中没有错误,但镜头未更新当我尝试 cascade.All 在 OneToMany 方面发生此错误:分离的实体传递给持久化:exmaprep.model.Entity。镜头
  • 你有两个独立的实体(所谓的aggregate root) - 摄影师和 Len。因此,您需要同时拥有两者的存储库。首先保存镜头,然后将它们添加到摄影师,然后保存摄影师。

标签: java spring jpa spring-data


【解决方案1】:

我想通了:我需要保存镜头之后我保存了摄影师:

for (Lens lens : lensSet) {
            lens.setOwner(photographer);
        }

        photographer.setPrimaryCamera(primaryCamera);
        photographer.setSecondaryCamera(secondaryCamera);
        photographer.setLenses(lensSet);


        this.photographerRepository.save(photographer);
        this.lensRepository.save(lensSet);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多