2012-02-19 5 views
0

난 그냥 며칠 전 플레이 프레임 워크를 시작한 후 문제 다 퉜다 : 공유 및 ShareValue값 날짜 별 객체 모델링이

단순화 공유 :

나는 두 가지 모델이

@Entity 
public class Share extends Model { 
    @Required 
    public String name; 
} 

단순화 ShareValue :

@Entity 
public class ShareValue extends Model { 
    @ManyToOne 
    public Share share; 
    public Date date; 
    public double value; 
} 

ShareValue 위와 같이 현재 시간 및 보유 날짜 별 단일 공유의 등가 값.

내 응용 프로그램의 대부분에서 - 특히 공유 객체로 작업 할 때 - 현재 값이있는 공유 목록을 렌더링하는 것과 같이 공유의 현재 값이 필요합니다. 이러한 목록을 쉽게 렌더링하려면 간단한 Getter로 현재 ShareValue에 액세스 할 수있는 것이 매우 편리 할 것입니다. 또한 성능상의 이유로 액세스시 다른 쿼리를 실행하지 않아도이 값으로 개체를 초기화하는 것이 좋을 것으로 기대합니다.

현재 값을 공유에 조인하는 SQL 쿼리를 작성하는 것은 매우 쉽지만 결과를 공유 모델에 바인딩하는 방법은 무엇입니까? 공유 객체에 @OneToOne 종속성을 추가 할 수 있습니까? 그러나 어떻게 현재 날짜를 지정해야합니까?

아니면 불가능하고 현재 ShareValue를 얻기 위해 다른 쿼리를 발행하는 공유에 간단한 getCurrentValue() 메소드를 추가하겠습니까?

나는 어떻게 든 졌어. 어떤 도움을 주셔서 감사합니다!

답변

0

당신은 관계의 한쪽 누락 :

@Entity 
public class Share extends Model { 
    @Required 
    public String name; 

    @OneToMany(mappedBy = "share") 
    public List<ShareValue> values; 

    public ShareValue getLatest(){ 
     return ShareValue.findLAtest(this); 
    } 
} 

@Entity 
public class ShareValue extends Model { 
    @ManyToOne 
    public Share share; 
    public Date date; 
    public double value; 

    public static ShareValue findLatest(Share share){ 
     return ShareValue.find("where share = ? order by date desc", share).first(); 
    } 
} 

당신은 플레이 tutorial 봤어? JPA 및 Play에 익숙하지 않은 분은 좋은 출발점입니다.

또한 목록 대신 정렬 된 집합을 사용하여 정렬 된 공유 값을 가져와 최신 값을 반환 할 수 있습니다.

+0

예. 나는 이미 그것을 시도했지만 공유의 모든 가치를 반복하는 것은 괜찮습니다. 그러나 위에서 언급했듯이 그것은 관계의이 측면에서 결코하지 못할 일입니다. 또한 공유에 액세스 할 때 최신 값 개체 만 가져오고 싶습니다. 대부분의 시간이 필요하기 때문입니다. – rabiatorDLX

+0

최근에 찾은 예제 업데이트 – emt14