복붙노트

[SPRING] 다른 DAO에서 하나의 DAO를 호출합니까?

SPRING

다른 DAO에서 하나의 DAO를 호출합니까?

이것은 이제까지 의미가있을 수 있는가?

다른 개체 (DB의 외래 키와 내 도메인 개체의 구성으로 표현됨)와 관계가있는 DB에서 개체를 가져와야한다고 가정 해보십시오. 첫 번째 DAO에서 객체 1의 데이터를 가져온 다음 객체 2의 DAO를 호출하고 마지막으로 (첫 번째 DAO 내에서 객체 1의 setter를 호출하고 이전에 가져온 객체 2를 지정합니다).

대신에 가입 할 수는 있지만 기능을 분리하는 것이 더 논리적 인 것 같습니다 (다른 사용자로부터 한 DAO를 호출하는 것에 대해 회의적 인 이유입니다). 또는 서비스 계층으로 일부 논리를 이동해야합니까?

감사

업데이트 : 나는 대답에서 도움으로 문제를 해결했다고 생각합니다. 필요한 것은 Object 1의 매핑에 다음을 추가하는 것입니다.

<one-to-one name="Object2" fetch="join"
        class="com...Object2"></one-to-one>

나는 다른 것을 바꿀 필요가 없었습니다. 도와 주셔서 감사합니다!

해결법

  1. ==============================

    1.이 책을 읽으면 나는 그럴 가능성이 가장 높다고 결론 지을 수 있습니다.

    이 책을 읽으면 나는 그럴 가능성이 가장 높다고 결론 지을 수 있습니다.

    ObjectA와 ObjectB 사이의 매핑을 OneToOne, OneToMany 또는 ManyToMany로 설정할 수 있다면, Hibernate는 A에서 B로 자동으로 참조를로드 할 것입니다. 이렇게하면 두 번째 DAO를 쿼리하고 ObjectA에서 ObjectB 참조를 설정할 필요가 없습니다.

    이 단계를 더 진행하면 ObjectB 용 DAO가 필요하지 않을 수도 있습니다!

  2. ==============================

    2.나는 개인적으로 DAO 사이의 참조를 피하는 것을 선호한다. 다른 작업을 수행하기 위해 DAO에서 가져온 데이터가 필요한 경우 DAO를 분리합니다.

    나는 개인적으로 DAO 사이의 참조를 피하는 것을 선호한다. 다른 작업을 수행하기 위해 DAO에서 가져온 데이터가 필요한 경우 DAO를 분리합니다.

    // Bad - have to inject Dao into antoher Dao
    class FooDao extends BaseDao {
      BarDao barDao;
    
      public Foo complexLoad() {
        return doFooStuff(barDao.loadBar());
      }
    }
    
    // Good - dependency on Bar only, not to Dao
    class FooDao extends BaseDao {
      public Foo complexLoad(Bar bar) {
        return doFooStuff(bar);
      }
    }
    

    그런 다음 두 DAO를 모두 서비스에 주입합니다.

  3. ==============================

    3.http://www.theserverside.com/discussions/thread.tss?thread_id=32661

    http://www.theserverside.com/discussions/thread.tss?thread_id=32661

    이것은 도움이 될 것입니다 ..

  4. from https://stackoverflow.com/questions/2285005/calling-one-dao-from-another-dao by cc-by-sa and MIT license