Весенние данные — ManyToOne не сохранились

#java #hibernate #jpa #spring-data-jpa #spring-data

#java #переход в спящий режим #jpa #spring-data-jpa #весенние данные

Вопрос:

В моем приложении у меня есть эти три класса

 @Entity
@Indexed
public class CpamEntity {

    @Id
    private String externalId;
    
    @Field
    private String cgr;
    
    @ElementCollection
    private Set<AttachmentEntity> attachments;
    
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "externalId")
    private Set<DataEntity> data;

}

@Entity
@Indexed
public class DataEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private String internalId;
    
    @Field
    private String number;

    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "externalId", updatable = false)
    private FrameworkEntity frameworkEntity;
    
}
  

приведенный ниже код предназначен для вставки DataEntity (X) в CpamEntity, затем получить все вложения CpamEntity с помощью IdChild и вставить в них тот же DataEntity (X)

проблема в том, что первая вставка не выполняется, и вложенный CpamEntity вложен

 public void on(Event event) {
        CpamEntity cpamEntity = getCpamEntity(event.externalId);
        if (cpamEntity != null) {
            Set<DataEntity> datas = cpamEntity.getData();
            datas.add(new DataEntity(event.internalId, event.number));
            cpamEntity.setData(datas);
            repository.save(cpamEntity); // not saved
            if (CollectionUtils.isNotEmpty(cpamEntity.getAttachments())) {
                cpamEntity.getAttachments().forEach(attachment -> {
                    cpamRepositoryentity = repository.findByCgr(attachment.getIdChild());
                    if (entity != null) {
                        Set<Entity> dataEntities = entity.getData();
                        dataEntities.add(new DataEntity(event.internalId, event.number));
                        entity.setData(dataEntities);
                        cpamRepository.save(entity); // saved
                    }
                });
            }
        }
    }
  

Комментарии:

1. Где @Transactional . границы на данный момент? И можете ли вы выполнить печать datas до и после datas.add(new DataEntity(event.internalId, event.number)); ?

2. Является ли externalId первичным ключом CpamEntity в БД?