Possiedo un'entità creata di recente da JpaRepository nell'app MVC di Spring. Questa entità si presenta così (molto semplificato):JpaRepository memorizza nella cache l'oggetto appena creato. Come aggiornarlo?
@Entity
public class Translation {
.....
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne(fetch = FetchType.LAZY)
private Version version;
....
}
e Versione entità:
@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;
}
crea un oggetto traduzione come questo
TranslationDTO t = new TranslationDTO();
t.setText(translationText);
ClientVersionDTO version = new ClientVersionDTO();
version.setId(11);
t.setVersion(version);
dove 11 è una versione che esiste in il database già dall'inizio. Si noti che non imposto valori per name
e code
di ClientVersionDTO.
Poi Ho un servizio che persiste nuovo oggetto (io uso dozer
biblioteca per convertire DTO alle entità)
@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();
}
}
Si prega di notare il mio commento "t2.getVersion() restituisce versione in cui sono impostati su 'senza valori codice 'e' nome '"- Mi aspettavo che quando ho recuperato i dati dal database, avrei ottenuto un oggetto Version
direttamente dal database con i valori code
e name
impostati. Tuttavia non sono impostati. Quindi in pratica quello che ottengo come oggetto t2.getVersion()
è lo stesso oggetto dell'argomento di input translationDTO.getVersion()
. Come possono invalidare nuovamente l'oggetto Version
?
UPDATE provato a spostare @Transactional su JpaRepository, ma sempre lo stesso risultato.
Probabilmente vuoi dire "Spring MVC"? È perché hai scritto "Sprint MVC" – AlexR
Sì, grazie. Errori di battitura modificati –
Prova a spostare @Transactional nel tuo repository per un test –