В конце концов, извините за мой плохой английский sh.
На самом деле я использую jpa и спящий режим в своем приложении для весенней загрузки.
Я сохраняю сущность, у которой есть список других сущностей в один ко многим.
Пример:
@DynamicUpdate
@Table(name = "T_FOO")
@Entity
class Foo{
private string id;
@OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, orphanRemoval = true)
@Singular
@JoinColumn(name = "foo_id", nullable = false)
private List<Bar> bars;
}
@Table(name = "T_BAR", uniqueConstraints = @UniqueConstraint(columnNames = {"FOO_ID", "TYPE"}))
@Entity
@DynamicUpdate
class Bar {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "FOO_ID", nullable = false)
@JsonIgnore
private Foo foo;
private String type;
}
В моем приложении я получаю много данных, похожих на дедуплицированные. Поэтому иногда я получаю один и тот же контакт в одном и том же контакте, и эта интеграция вызывает уникальное ограничение полосы.
Мой вопрос в следующем случае:
Foo{
bars: {
bar 1 => unique constraint,
bar 2,
bar 3
}
Возможно сказать спящему режиму, чтобы обойти сохранение бара 1, потому что он уже существует? и просто сохраните foo, полоску 2 и полоску 3?
Заранее спасибо за ваши ответы
РЕДАКТИРОВАТЬ: это сохраняется с помощью Transationnal Annotation, полученного из import org.springframework.transaction .annotation.Transactional;
@Transactional
public void updateFooFromHistory(String fooId) {
fooRepository.findById(fooId).ifPresent(foo -> {
Set<FooHistory> fooHistorics = getFooHistoricsFromFoo(foo);
updateFooFromHistoryServices.forEach(updateFooFromHistoryService ->
updateFooFromHistoryService.updateFooFromHistory(foo, fooHistorics));
});
}