#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 в БД?