Когда весенняя загрузка перерисовывает объект, я хочу игнорировать поля, аннотированные @MayToOne и @ OneToMany
Почему я хочу их игнорировать? Потому что в моем случае я должен их игнорировать, и это длинная история, я не хочу говорить об этом здесь.
Вот объект.
@Entity
@Table(name = "tga_project_application_record")
@Data
@EntityListeners(AuditingEntityListener.class)
public class ProjectApplicationRecord implements Serializable {
private static final Long UID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@JsonIgnore
@ManyToOne
@JoinColumn(nullable = false)
private User user;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(nullable = false)
private Project project;
private String processInstanceId;
@Type(type = "json")
@Column(columnDefinition = "json", nullable = false)
private Object applicationInfo;
@Column(nullable = false)
private ApplicationStatus status;
@Enumerated(EnumType.STRING)
private RealTimeStatus realTimeStatus;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dynamic_form_id", nullable = false)
private DynamicForm form;
@Type(type = "json")
@Column(columnDefinition = "json", nullable = false)
private Set<ApplicationFile> applicationFiles;
@CreatedDate
private Timestamp createdAt;
@LastModifiedDate
private Timestamp updatedAt;
}
Я использую аннотации весеннего загрузочного кэша для кэшей управления.
Вот часть того, как я использую эти аннотации для управления моим кешем.
@Caching(
put = {@CachePut(value = "projectApplicationRecordCache", key = "#id")},
evict = {
@CacheEvict(value = {"projectApplicationRecordPaginatedCache", "projectApplicationRecordListCache", "projectApplicationRecordCacheByProcessInstanceId"}, allEntries = true),
@CacheEvict(value = {"getByProjectIdAndUserIdIfThatRecordIsNormalCache"}, key = "{#result.project.id, #result.user.id}"),
}
)
@Override
@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public ProjectApplicationRecord patchUpdate(Long id, ProjectApplicationRecord object) {
apiUtilsService.notNull(object);
noViolationUniqueConstraint(object);
ProjectApplicationRecord fullRecord = getByIdForUpdate(id);
apiUtilsService.merge(fullRecord, getSafeObj(fullRecord, object));
return recordRepository.save(fullRecord);
}
@Caching(
put = {@CachePut(value = "projectApplicationRecordCache", key = "#result.id")},
evict = {
@CacheEvict(value = {"projectApplicationRecordPaginatedCache", "projectApplicationRecordListCache"}, allEntries = true),
@CacheEvict(value = "getByProjectIdAndUserIdIfThatRecordIsNormalCache", key = "{#result.project.id, #result.user.id}")
}
)
@Override
@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public ProjectApplicationRecord create(ProjectApplicationRecord object) {
apiUtilsService.notNull(object);
noViolationUniqueConstraint(object);
return recordRepository.save(getSafeObj(null, object));
}
Спасибо вам всем И мой английский не очень хорош, простите меня, пожалуйста.
Может быть, я могу использовать собственный сериализатор для замены стандартного сериализатора spring-boot-data-redis для поддержки, игнорируя поля, аннотированные @MayToOne и @OneToMany?