2013-02-25 3 views
0

와 최대 절전 모드의 속성을 가져 오기 : startPoint를 생성 오른쪽 값을 가져올 속성 전에내가 아래 시나리오가 특정 순서

class GraphUser { 

    @Column(name="first_name") 
    private String firstName = ""; 

    @Column(name="middle_name") 
    private String middleName = ""; 

    @Column(name="last_name") 
    private String lastName = ""; 

    @Column(name="start_point") 
    private String startPointId = ""; 

    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "points") 

    private HashMap<Point> points= new HashMap<Point>(); 

    private Point startPoint = points.get(startPointId); 

} 

startPointId를 가져 최대 절전 모드를 강제 할 수있는 방법이 있습니다를 점?

답변

0

startPointId에 대해서는 startPoint 지정자를 지정하고 startPoint에 대해서는 getter에 지정하면됩니다. startPointtransient or @Transient so Hibernate doesn't muck with it이어야합니다.

public void setStartPointId(String startPointId) { 
    this.startPointId = startPointId; 
    this.startPoint = points.get(startPointId); 
} 

// or 

public Point getStartPoint() { 
    if (this.startPoint == null) { 
     this.startPoint = points.get(startPointId); 
    } 
    return this.startPoint; 
} 

public void setStartPointId(String startPointId) { 
    this.startPointId = startPointId; 
    this.startPoint = null; 
} 
+0

내가 그것을 몇 번을 작동하고 몇 번이하는 그것을 시도를 작동하지 않음 –

+0

"작동하지 않음"을 정의하십시오. –

+0

문제는 때때로 포인트 맵은 여전히 ​​비어 있으며 데이터베이스에서 가져 오지 않기 때문에 getStartPoint()를 호출하기 전에 강제로 채울 수있는 방법이 필요합니다. –

1

당신은 일시적인 게터를 사용하여 속성 필요하지 않습니다. 당신은 당신이 출발점을 얻을 필요가있을 때마다 그것을 부른다.

@Transient 
public Point getStartPoint() { 
    return points.get(startPointId); 
} 

이 (pointsFetchTypeEAGER입니다 제공) 혼전으로 작동하고, Hibernate는 안전하게 무시합니다.
사실, 매번 HashMap을 쿼리 할 때 약간의 성능 손실이있을 수 있지만, 걱정하지 않아도됩니다. 또한

, I 즉, 당신이 Mappoints의 선언에 HashMap를 교체하는 것이 좋습니다 :

@ManyToMany(fetch = FetchType.EAGER, mappedBy = "points") 
private Map<Point> points = new HashMap<Point>(); 

(업데이트 getter 및 setter 따라)