2011-05-12 2 views
1

매우 일반적인 대상 도달 불가능 예외와 관련하여 2 가지 질문이 있습니다. 국가에는시, 도시에는 거리가 있습니다. - 국가의 생성자 new City()에 City의 생성자 new Street() 을 넣으십시오. (따라서 사용자는 아무렇지도 않게 중앙에 배치 할 수 있지만 항상 필요하지 않은 객체를 만듭니다) 또는 객체를 초기화합니다. 코드의 여러 위치에서 필요로하는 곳에서? (코드 전체에 퍼짐) - 사용자가 거리에 대해 아무 말도하지 않는다면 DB에 빈 행을 삽입하지 못하도록 거리를 null로 되돌립니다. 다시 null로 되돌릴 수있는 가장 좋은 곳은 어디입니까? 왜 JSF 그냥 무엇을 필요로하는지 인스턴스화되지 않으며,이 엔티티를 지속하지 최대 절전 모드 : 는우아한 방법으로 도달 할 수없는 대상을 처리하는 방법

PS는 (그렇지 않으면 당신은 당신이 비어 알고 있다면 그냥 저장하지 거라고, 당신이 Cascade.ALL 또는 확장 컨텍스트가 있다고 가정) 모든 영구 필드가 비어 있습니까? 성능 또는 그 이유는 무엇입니까? 다시 한번 PK와 FK를 사용하여 DB에서 빈 행을 만드는 것이 좋지 않습니까?

답변

2

저는 앱의 엔티티 간의 관계에 따라 달라질 것이라고 생각합니다. 어떤 경우에는 생성자에서 다른 객체의 관련 인스턴스를로드하지만 다른 객체가없는 엔티티가없는 경우에만로드합니다.

하나의 대안은 게터에 느리게 개체를 만드는 것입니다 :

public class Country { 

    private City city; 

    public City getCity() { 
     if (this.city == null) { 
      this.city = new City(); 
     } 

     return this.city; 
    } 

} 

지금까지 JSF 당신을 위해 객체를 생성하지 않는 PS 질문으로 - 나는 그게 바람직 할 것이다 모르겠어요 .. 게으른 getter 접근 방식을 사용하면 효과적으로 동일한 것을 얻습니다. Hibernate는 영속 객체 모델의 현재 상태를 지속하기 때문에 그것이 인스턴스화 되었다면 엔티티를 지속하고 만약 엔티티를 지속하지 않는다면 예상대로 작동하지 않을 것이다.

저는 ORM이 약간의 작은 비용으로 성능이 제공된다는 것을 알고 Hibernate를 사용하기로 선택할 때 일반적으로 몇 개의 null 행에 대해 걱정하지 않습니다. 나에게는 여전히 끈기의 추상화를 즐기는 것이 가치가있다.

+0

게으른 게터가 생성자보다 더 나은 것처럼 보일 수 있지만 성능상의 문제가 거의 발생하지 않는 경우 "그렇지 않은 것입니까? jsf 게터에서 그것을 알고있는 것은 많이 불린다. 코드에서 여러 곳에서 인스턴스화하는 방법에 대해 어떻게 생각합니까? 필요할 때가 있다는 것을 알았습니까? (나를 위해 그것을 추적하고 오류가 발생하기 어려운 것) –

+0

컴파일 된 Java 응용 프로그램에서 평가되는 속도는 실제로 측정 가능한 성능 차이를 만들지는 않지만 귀하의 질문에 나는 또한 아무런 문제도 볼 수 없습니다. 앱에서 필요한 곳에서 객체를 인스턴스화합니다. –

관련 문제