JPA/HibernateでSpringBootを使用していますので、監査を追加したいと思います。updatable = falseのエンティティを更新すると、フィールドがNULLに設定されます
私は次のように抽象的実体を作成しました:
@CreatedDate
@NotNull
@Column(columnDefinition = "DATETIME(3)", updatable = false)
private ZonedDateTime createdDate;
@LastModifiedDate
@Column(columnDefinition = "DATETIME(3)")
private ZonedDateTime lastModifiedDate;
アプリケーション
私は実体上の簡単なCRUDとRESTfulなAPIを研究開発をしています。 マイリソース(コントローラ)
問題を作成し、更新するためのJPAリポジトリに保存()メソッドを使用している:
私はそれを更新するために、エンティティにrepository.save()を呼んでいるときは、 "createdDate"は無視されます(これは正常ですが)。メソッドによって返されるエンティティは、 "createdDate"がnullに設定されています。
エンティティはキャッシュに置かれ、次のgetはcreatedDateの値もnullになります。
フィールドcreatedDateの変更とJpaCrudRepositoryの変更を許可せずにエンティティを更新するにはどうすればよいですか?
更新
リポジトリの定義:
public interface ModelRepository extends JpaRepository<Model, Long> {
RESTコントローラー:UPDを
:エンドポイントで返さ
public ResponseEntity<Model> createModel(@RequestBody Model model) throws URISyntaxException {
Model result = modelRepository.save(model);
return ResponseEntity.created(new URI("/api/v1/models/" + result.getId()))
.body(result);
}
JSONが含まれている "ヌルCreatedDateに"
@Override
public Model save(Model model) {
Model result = modelRepository.save(model);
return result;
}
@Override
public Model update(Long id, Model model) {
Model existingModel = modelRepository.findOne(id);
if (existingModel == null) {
return null;
}
// Non updatable fields
model.setId(id);
model.setCreatedDate(existingModel.getCreatedDate());
Model result = modelRepository.save(model);
return result;
}
は、この作業を行うには、私も持っていることから、結果を防ぐためにCreatedDateにフィールドから「更新可能な= false」を削除している:私はこのようなサービスを作成してこの問題を解決するには
2を食べました保存後の日付はnullです。
後で手動で処理する必要がある場合は、「updatable = false」という目的を理解できません。
エンティティを保存するコードを表示できますか? – Patrick