Posiadam JpaRepository uporczywie nowo utworzony podmiot w Spring MVC app. Podmiot ten wygląda następująco (bardzo uproszczony):JpaRepository buforuje nowo utworzony obiekt. Jak to odświeżyć?
@Entity
public class Translation {
.....
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne(fetch = FetchType.LAZY)
private Version version;
....
}
i wersja podmiot:
@Entity
public class Version {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private long id;
@Column(name = "name")
private String name;
@Column(name = "version_code")
private long code;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "version", cascade = {CascadeType.ALL}, orphanRemoval = true)
private Set<Translation> translations;
}
utworzyć obiekt translacji jak ten
TranslationDTO t = new TranslationDTO();
t.setText(translationText);
ClientVersionDTO version = new ClientVersionDTO();
version.setId(11);
t.setVersion(version);
gdzie 11 to wersja, która istnieje w baza danych już od samego początku. Proszę zauważyć, że nie ustawiam wartości dla name
i code
z ClientVersionDTO.
Wtedy mam usługę, która utrzymuje się nowy obiekt (używam dozer
biblioteki do konwersji Dto podmiotom)
@Service
@Transactional
public class TranslationsServiceImpl implements TranslationsService {
@Override
public Long create(TranslationDTO translationDTO) {
Translation translation = translationsConverter.unconvert(translationDTO);
Translation t = translationRepository.saveAndFlush(translation);
Translation t2 = translationRepository.findOne(t.getId());
// !!!! t2.getVersion() returns version where no values are set to 'code' and 'name'
return t2.getId();
}
}
Proszę zauważyć mój komentarz „t2.getVersion() zwraca wersję gdzie nie ma wartości są ustawione na ' code 'and' name '"- Spodziewałem się, że po pobraniu danych z bazy danych otrzymam obiekt Version
bezpośrednio z bazy danych z ustawionymi wartościami code
i name
. Jednak nie są one ustawione. Więc zasadniczo to, co otrzymuję jako obiekt t2.getVersion()
, jest tym samym obiektem, co w argumencie wejściowym translationDTO.getVersion()
. Jak mogę ponownie unieważnić obiekt Version
?
AKTUALIZACJA próbował przenieść @Transactional do JpaRepository, ale nadal ten sam wynik.
Czy prawdopodobnie masz na myśli "Spring MVC"? To dlatego, że napisałeś "Sprint MVC" – AlexR
Tak, dziękuję. Zmieniono literówki. –
Spróbuj przenieść swój @Transactional do repozytorium na test –