0

스프링 데이터로 개체를 업데이트하지 못하도록하는 방법을 찾고 있습니다. 이것에 대한 몇 가지 주제를 찾았지만 어느 것도 해결책이 없습니다.스프링 데이터 : 업데이트 금지

나는 그것을 생성하고 읽을 수있는 객체를 가지고있다. 그게 전부 야. 수정/업데이트를 지원하고 싶지 않습니다. 나는 스스로 데이터베이스 ID를 관리/생성한다.

나는 (내가 어떻게 든 업데이 트를 방지하기 위해 <S extends T> S save(S entity); 논리를 변경할 수있는 경우 또는 JpaRepository/CrudRepository) 나는 ... 인터페이스 표기법을 깨끗한 findBy를 사랑하기 때문에, org.springframework.data.repository.Repository 인터페이스를 사용 싶어요.

가장 좋은 해결책은 Persistable을 구현하고 isNew(…)을 덮어 쓰면 항상 true를 반환하는 것입니다. 그러나 읽기 전용 인 경우 객체가 "새로운"것이 아니기 때문에 이는 단지 진절머리 나는 행동입니다.

이것을 달성 할 수있는 방법이 있습니까?

+0

이 개체의 모든 속성에'업데이트 할 수 = FALSE '를 추가합니다. JPA 제공자가 변경 사항을 감지하지 못하기 때문에'update' 호출은 무시됩니다. – manish

+0

알아두면 편리하게, 고마워! 그러나 그것은 여전히 ​​내 문제를 해결하지 못합니다 (심지어 더 나빠질 것입니다) : 예를 들어 개발자가 1 년 내에 부동산을 추가하면, 그 행동은 갑자기 우연히 발생할 수 있습니다. –

+0

문제를 조금 더 잘 설명 할 수 있습니까? 엔티티'Foo'와 관련 저장소'FooRepository'가 있다고 가정 해 보겠습니다. 'FooRepository'가'CUD' (생성, 업데이트, 삭제) 메소드 (즉, 메소드 만 읽음)를 갖기를 원합니까? 아니면 메소드가 존재하기를 원하지만 호출 할 때 아무 효과가 없나요? 질문에'FooRepository'에 대해 원하는 정의 (원하는 방법)를 추가 할 수 있다면 유용 할 것입니다. – manish

답변

0

당신은, 예를 들어, 단순히 작업을 업데이 트를 제한하고 삭제 Repository event handler를 사용할 수 있습니다

@RepositoryEventHandler(MyEntity.class) 
public class MyEntityEventHandler { 

    @HandleBeforeSave 
    public void handleUpdate(MyEntity entity) { 
     throw new HttpRequestMethodNotSupportedException("Update") 
    } 

    @HandleBeforeDelete 
    public void handleDelete(MyEntity entity) { 
     throw new HttpRequestMethodNotSupportedException("Delete") 
    } 
} 
+0

spring-data-rest를 사용하지 않는 대안이 있습니까? –

+0

SDR을 사용하고 있다고 생각했지만 사용하지 않으면 컨트롤러 메소드를 업데이트/삭제하지 않거나 다른 것을 필요로합니까? – Cepr0

+0

저는 spring-data-rest가 아닌 spring-data-jpa를 사용하고 있습니다. 스프링 - 데이터 - 휴식은 원칙이 완전히 우리가 달성하고자하는 것과 반대이기 때문에 선택 사항이 아닙니다. spring-data-rest는 어떤 저장소에서도' S save (S entity);가있는 pring-data-jpa의 위 계층이다. –

관련 문제