2016-10-25 4 views
0

지연로드되고 OneToMany 관계에서 사용되는 경우 최대 절전 모드 모델 클래스의 toString() 메소드에 속성 항목을 넣을까요?Hibernate - OneToMany 관계

class Employee { 
    private Set<IiopUrl.Address> addressDetailsSet; 
    //getters and setters 

    @OneToMany(cascade = {CascadeType.ALL}) 
    @LazyCollection(LazyCollectionOption.TRUE) 
    @JoinTable(name = "Employee_Address_Map", 
      joinColumns = {@JoinColumn(name = "Employee_ID", referencedColumnName = "INNER_ID")}, 
      inverseJoinColumns = {@JoinColumn(name = "Address_Id", referencedColumnName = "INNER_ID")}, 
      uniqueConstraints = @UniqueConstraint(columnNames = {"Employee_ID", Address_Id})) 
    public Set<IiopUrl.Address> getAddressDetailsSet() { 
     return addressDetailsSet; 
    } 
} 
+0

언급 된 코드는 예제 코드입니다. 제발 서명을 신경 쓰지 마세요. – rajvineet

답변

1

예상대로 대답은 "다릅니다"입니다. 관계에 포함시킬 필요가있는 로직에 toString()을 의지해야 할 수도 있습니다.

그러나 대부분의 경우 이러한 특성을 포함하여 문제가 발생할 수 있습니다. toString()는 일반적으로 다음과 같은 문제로 실행할 수 있습니다 관계를 포함하여, (예를 들어, 로깅에 등 디버깅하는 동안) 다른 진단 상황에서 사용됩니다 : 당신이 toString() 외부 트랜잭션 경계를 호출하는 경우

  1. , 런타임 예외가 있기 때문에 존재의 발생합니다 (Hibernate의 용어로) lazy fetching을위한 세션이 없다.

  2. 큰 개체 그래프를 형성 할 수있는 관계로 엔티티가 보통 연결되어 있다고 가정하면 맹목적으로 관계를 toString()에 포함 시키면 막대한 양의 데이터를 가져 오는 것이 문제가 될 수 있습니다.

개인적인 경험으로는 밀접하게 관련된 관계 만 포함됩니다. 나는 정말로 그것이 필요한지 확실하지 않으면 관계를 배제하고 싶습니다. toString()을 진단 목적으로 만 사용하고 비즈니스 논리에서 문자열 표현이 필요한 경우 이러한 목적으로 새 메서드와 인터페이스를 선언하는 것이 좋습니다.