Tôi có một JpaRepository kiên trì thực thể mới được tạo ra trong ứng dụng Spring MVC. thực thể này trông như thế này (rất đơn giản):JpaRepository lưu trữ đối tượng mới được tạo. Làm thế nào để làm mới nó?
@Entity
public class Translation {
.....
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne(fetch = FetchType.LAZY)
private Version version;
....
}
và phiên bản thực thể:
@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;
}
tôi tạo ra một đối tượng dịch như
TranslationDTO t = new TranslationDTO();
t.setText(translationText);
ClientVersionDTO version = new ClientVersionDTO();
version.setId(11);
t.setVersion(version);
này
nơi 11 là một phiên bản tồn tại trong cơ sở dữ liệu đã có ngay từ đầu. Xin lưu ý rằng tôi không đặt giá trị cho name
và code
của ClientVersionDTO.
Sau đó, tôi có một dịch vụ mà vẫn tồn tại đối tượng mới (tôi sử dụng dozer
thư viện để chuyển đổi DTO cho các tổ chức)
@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();
}
}
Xin lưu ý nhận xét của tôi "t2.getVersion() trả về phiên bản mà không có giá trị được đặt là ' code 'và' name '"- Tôi đã mong đợi khi tôi lấy dữ liệu từ cơ sở dữ liệu, tôi sẽ nhận được một đối tượng Version
ngay từ cơ sở dữ liệu với các giá trị code
và name
được đặt. Tuy nhiên chúng không được thiết lập. Vì vậy, về cơ bản những gì tôi nhận được như một đối tượng t2.getVersion()
là đối tượng tương tự như trong đối số đầu vào translationDTO.getVersion()
. Làm thế nào tôi có thể làm mất hiệu lực đối tượng Version
?
CẬP NHẬT đã thử di chuyển @Transactional sang JpaRepository, nhưng vẫn có cùng kết quả.
Bạn có thể có nghĩa là "Spring MVC"? Đó là bởi vì bạn đã viết "Sprint MVC" – AlexR
Vâng, cảm ơn. Sửa lỗi chính tả. –
Hãy thử di chuyển @Transactional của bạn đến kho lưu trữ của bạn để kiểm tra –