Hibernate 기반 트랜잭션 서비스 메서드를 통해 데이터를 전달할 때 DTO 사용을 피하는 진정한 실질적인 방법이 있습니까? 달리 말하면, DTO는 게으른 초기화 문제를 피하는 해커가 아닌 유일한 솔루션입니까?데이터 전송 개체 및 트랜잭션 서비스 메서드
열기 세션보기 패턴 :
나는 DTO들에 대한 두 개의 인기있는 대안 내가 정말 그들처럼하지 않는 이유를 생각한다. 서비스 메소드를 진정으로 트랜잭션으로 유지하고 싶습니다 (즉, Hibernate 세션은 메소드가 종료 될 때 커밋되고 닫힙니다). 이는 나중에 예를 들어 웹 서비스로 서비스를 게시해야하는 경우 트랜잭션에 대해 걱정할 필요가 없기 때문에 주로 발생합니다.DTO 대신 서비스 메소드를 통해 전달하고 필요한 속성/등록 정보를 eager fetching합니다. 이것은 다소 나아졌습니다. 그러나 복잡한 엔티티 관계가있는 중요하지 않은 도메인 객체 계층에서 열망하는 가져 오기는 어딘가에서 중단되어야합니다. 그리고 그럴 때 엔, 이것이 엔티티를 어디에서나 참조하는 ID로 대체하는 완전한 해킹 턴으로 어떻게 빨리 변하지 않을지 나는 알 수 없습니다.
실제로 뭔가가 빠져 있거나 DTO입니까? 유지 관리의 관점에서 보면 단단한 접근 방식입니까?
세션을 열어두면 합리적인 것처럼 보인다. 웹 서비스와 까다로운 부분은 엔티티 객체 트리가 깊은 경우, 몇 가지 (나중에 조회 할) 리거나 참조 식별자로 대체해야한다는 것입니다. 일단 이렇게하면 DTO가 서비스 외부에 형성 되더라도 기본적으로 DTO를 갖게됩니다. –