У меня есть две сущности BatchFcm
и FcmTopics
.Один FcmTopic может принадлежать многим BatchFcm, поэтому он имеет отношение @ManyToOne
.Я пытаюсь сохранить пакетный файл, но он не сохраняется.
Я уже пытался поставить
@ManyToOne(cascade = CascadeType.PERSIST)
FcmTopics fcmTopics
Я даже пытался CascadeType.ALL
.Но это не мое требование.В таблицу fcmtopics уже будут вставлены данные, мне нужно выбрать их и установить в базе данных batchfcm.
Я пробовал аннотацию @Transient
, она работала, но fcmTopics в столбце всегда остается нулевым.Я хочу столбец с идентификатором fcmtopics в нем.Th Transient перестает отображать поле fcmtopics в данные json при извлечении из контроллера.Но я хочу получить его.
Вот мои сущности
BatchFcm
@Entity
@Table(name = "batch_fcm")
@Getter
@Setter
@NoArgsConstructor
public class BatchFcm extends AbstractEntity {
@ManyToOne
private FCMTopics fcmTopics;
FcmTopics
@Entity
@Table(name = "fcm_topics")
@Getter
@Setter
public class FCMTopics extends AbstractEntity {
@Column(unique = true)
private String name;
private String description;
private FCMTopicStatus status;
Когда я использую CascadeType
, я получаю исключение constraintViolation с дублирующим ключом, я знаю, что это связано с unique = true
.Ниже мой сервис
BatchFcm fcmDetail;
if (adminFcmResource.getId() != null) {
log.info("Updating bulk fcm log for batch id: {}, admin: {}", adminFcmResource.getId(), adminUser);
fcmDetail = batchFcmRepository.findOne(adminFcmResource.getId());
fcmDetail.setStatus(adminFcmResource.getStatus());
fcmDetail.setCreatedBy(adminFcmResource.getAdminId());
fcmDetail.setImagePath(adminFcmResource.getImagePath());
fcmDetail.setLogo(adminFcmResource.getLogo());
if (!InputUtil.isEmpty(adminFcmResource.getTopic())) {
fcmDetail.setFcmTopics(fcmTopicsService.findByName(adminFcmResource.getTopic()));
} else {
fcmDetail.setCsvPath(adminFcmResource.getCsvPath());
}
} else {
log.info("Adding bulk fcm log with csv path: {}, admin: {}", adminFcmResource.getCsvPath(), adminUser);
fcmDetail = new BatchFcm(adminFcmResource.getTitle(),
adminFcmResource.getMessage(),
adminFcmResource.getImagePath(),
adminFcmResource.getAdminId(),
adminFcmResource.getExternalRedirectUrl());
if (!InputUtil.isEmpty(adminFcmResource.getTopic())) {
fcmDetail.setFcmTopics(fcmTopicsService.findByName(adminFcmResource.getTopic()));
} else {
fcmDetail.setCsvPath(adminFcmResource.getCsvPath());
}
fcmDetail.setLogo(adminFcmResource.getLogo());
fcmDetail.setForScheduling(false);
}
fcmDetail.setFcmType(FCMTypes.OFFERS.ordinal());
fcmDetail.setCreatedBy(AuthUtil.getCurrentUser().getId());
batchFcmRepository.save(fcmDetail);
Хотя findByName
имеет @Cacheable
.Есть ли способ сохранить данные?а также сохранить идентификатор в столбце.Я сделал @JoinColumn(referencedColumnName = "id", name = "fcm_topics_id")
.