在子项中插入新记录(JPA)的多对多映射问题

时间:2018-12-19 05:32:48

标签: java spring-boot jpa spring-data-jpa

我正在使用JPA的许多很多注释。我有3个表postal_masterpostal_mappingpostal_detail。我必须在postal_detail表中插入新记录,但是该条目已经在postal_master表中。

现在要实现相同的目的,我必须从id表中获取postal_master,并使用现有的JPA实体和{ {1}}。新记录已成功插入postal_master中,但是postal_detail表删除了postal_detail实体的先前映射并插入了新映射。我希望映射表中应该存在新的和以前的映射。

postal_mapping

postal_master表中,我以@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL}) @JoinTable(name = "dbk_postal_mapping", joinColumns = @JoinColumn(name = "postal_master_id"), inverseJoinColumns = @JoinColumn(name = "postal_detail_id")) private Set<PostalDetailEntity> postalDetails; 作为主键,与postal_master表相同。在id表中,postal_detailpostal_mapping是外键,将其视为主键。

Image to Explain the scenario

我不擅长绘画。如果你们不明白这个问题,请告诉我吗?

保存代码:

postal_master_id

域类:

PostalMaster:

postal_detail_id

PostalDetail:

        Long postalMasterId 
=postalMasterRespository.findByCountryCodeAndPostalCode(postalMasterEntity.getCountryCode() , postalMasterEntity.getPostalCode());
            if(null != postalMasterId) {
                postalMasterEntity.setId(postalMasterId);
            }

            postalMasterRespository.save(postalMasterEntity);

AuditableEntity:

    @Entity
@Data
@Table(name = "dbk_postal_master")
@EqualsAndHashCode(callSuper = false, exclude = {"id", "postalDetails"})
public class PostalMasterEntity extends AuditableEntity {

    private static final long serialVersionUID = 1L;

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

    private String countryCode;

    private String postalCode;

    @Column(name = "is_active")
    private Boolean active;

    @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL})
    @JoinTable(name = "dbk_postal_mapping", joinColumns = @JoinColumn(name = "postal_master_id"), inverseJoinColumns = @JoinColumn(name = "postal_detail_id"))
    private Set<PostalDetailEntity> postalDetails;

请让我知道我该如何实现?

谢谢。

1 个答案:

答案 0 :(得分:0)

从主对象获取一组邮政详细信息,并在其中添加新的邮政详细信息。然后再次设置并调用保存方法。