Проблема отображения многих в многие при вставке новых записей в дочерние элементы (JPA) - PullRequest
0 голосов
/ 19 декабря 2018

Я использую от многих ко многим аннотацию JPA.У меня есть 3 таблицы postal_master, postal_mapping и postal_detail.Я должен вставить новые записи в таблицу postal_detail, но запись уже существует в таблице postal_master.

Теперь, чтобы добиться того же, мне нужно извлечь таблицу id из postal_master и вызватьта же функция JPA с существующей сущностью 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_detail.В таблице postal_mapping, postal_master_id и postal_detail_id - это внешний ключ, а комбинированный трактовать как первичный ключ.

Image to Explain the scenario

У меня плохо получаетсяРисунок.Пожалуйста, дайте мне знать, если вы, ребята, не понимаете проблему?

код для сохранения:

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

            postalMasterRespository.save(postalMasterEntity);

Доменные классы:

PostalMaster:

    @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;

PostalDetail:

@Data
@EqualsAndHashCode(callSuper=false)
@Entity
@Table(name = "dbk_postal_detail")
public class PostalDetailEntity extends AuditableEntity {

    private static final long serialVersionUID = 1L;

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

    private Long providerId;

    private String centerCode;

    private String accessTechnology;

    private String speed;

AuditableEntity:

    @MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class AuditableEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @CreatedBy
    private String createdBy;

    @CreatedDate
    private Date creationDate;

Пожалуйста, дайте мне знать, ребята, как мне этого добиться?

Спасибо.

1 Ответ

0 голосов
/ 19 декабря 2018

Из главного объекта получите набор почтовых реквизитов и добавьте в них новые почтовые реквизиты.а затем установите его снова и вызовите метод сохранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...