전달하는 방법 엔터티를 사 컨트롤러 및 서비스에서는 방법 Spring Data JPA?

0

질문

Let's 을 고려한 봄 부팅(Spring Data JPA)응용 프로그램으로 컨트롤러 및 서비스에서 아래 예제:

  • processEntity() 를 가져옵체에서 데이터베이스 및 프로세스/업데이트 할 것입니다.
  • publishEntity() 별도의 방법을 다시 가져오는 객체 데이터베이스에서,그리고 출판이 그것을 다른 시스템입니다. 그것을 필요로"최신"상태의 엔티티 데이터베이스에서.

나는 여러 가지를 발견했 블로그 게시물과 기사에는 권장 하지 않으로 운영하는 엔티티에서 컨트롤러,즉 범위 밖에서 트랜잭션이 있습니다. 그래서 수업과 같습니다:

@Service
public SomeService {

    @Transactional
    public void processEntity(long id) {
        final SomeEntity someEntity = entityRepository.findById(id);
        // process entity...
        entityRepository.save(someEntity);
    }

    @Transactional(readOnly = true)
    public void publishEntity(long id) {
        final SomeEntity someEntity = entityRepository.findById(id);
        // publish entity to another system...
    }
}

@RestController
public SomeController {

    @GetMapping(path = "/api/entity")
    public ResponseEntity<Void> getEntity() {
        someService.processEntity(1);
        someService.publishEntity(1);
    }
}

은 이 방법은 합리적입니까? 또는 있는 더 나은 패턴이 이러한 사용할 경우? 그것은 것"으로 간주 나쁜 연습으면" processEntity 반 entity 자체 컨트롤러는 전달하기 publishEntity?

java spring spring-boot spring-data-jpa
2021-11-23 18:05:30
2

최고의 응답

2

로 돌아 엔터티를 받은 엔터티를 컨트롤러에서는 일반적으로는 나쁜 연습과 일반적인 원본의 문제(don't get me wrong,그리고 실제로 작동하는지,그래서 당신의 사용의 경우는 그렇게 간단한 당신은 아마 얼굴 몇 가지 제약을 하는 동안 그래서). 를 사용해야 합 dto 로 대신하는 것은 비슷한 클래스를 당신의 엔티티만을 나타낼 수 있는 여러망의 도메인에서 모델(의체에서 당신의 경우).

여러 가지 이유가 있을 사용에 대한 dto 로:

  • 할 수 있는 문제의 분리 사이 귀하의 도메인 모델과"공개"모델을 변경할 수 있도록,하나의 필요없이 변경합니다.
  • 그것은 당신이 쉽게 여러망의 엔티티가 필요없이 포함 잭슨 마법의 주석을 제외되거나 포함되는 몇 가지 특성에서 당신의 엔티티 클래스입니다.

에 대해 자세히 알아볼 수 있습이에서 다음과 같은 온라인 리소스: https://www.baeldung.com/java-dto-pattern.


사용하기로 결정한 경우 dto 로,고려도를 사용하여 매퍼는 다음과 같은 것들:

나는 진짜로 좋아하지 않는다 그들을 사용하여(선호를 매핑을 수행하고 내 자신에),하지만 당신이 찾을 수 있습니다 그들에게 유용합니다. 매핑을 수행할 수 있습 서비스 계층에서 자체에 또는에서 컨트롤러층이다. 장점과 단점이 있습니다 각 방법 중 하나,하지만 난 그것은 정말입니다.

2021-11-23 19:00:28
2

를 사용하는 것이 좋 DTO 사 컨트롤러 및 서비스입니다. 에서 결정한 경우를 제거한 데이터베이스와 사용하여 외부 시스템,나중에,다음 컨트롤러 레이어는 아무런 영향이 없습니다.

2021-11-23 18:22:21

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................