Я использую от многих ко многим аннотацию 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
- это внешний ключ, а комбинированный трактовать как первичный ключ.
У меня плохо получаетсяРисунок.Пожалуйста, дайте мне знать, если вы, ребята, не понимаете проблему?
код для сохранения:
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;
Пожалуйста, дайте мне знать, ребята, как мне этого добиться?
Спасибо.