Избегайте ограничения уникальности для подобъекта весной с помощью jpa и гибернации в базе данных oracle - PullRequest
0 голосов
/ 05 августа 2020

В конце концов, извините за мой плохой английский 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)); 
        }); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...