2012-02-19 1 views
0

私はほんの数日前にプレイフレームワークで開始した後に問題に遭遇した:共有とShareValue値日付によるオブジェクトモデリングは

簡易株式:

私は2つのモデルを持っています

@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上記のように、現在およびh保持します単一のシェアの等価値を日付で指定します。

私のアプリケーションのほとんどの部分、特にShareオブジェクトを扱うときは、現在の値の共有リストをレンダリングするなど、共有の現在の値が必要です。これらのリストを簡単にレンダリングするには、単純なゲッターで現在のShareValueにアクセスできるようにするのが非常に便利です。また、パフォーマンス上の理由から、アクセス時に別のクエリを発行しなくても、この値でオブジェクトを初期化するとよいでしょう。

現在の値を共有に結合するSQLクエリを作成するのは簡単ですが、結果を共有モデルにバインドするにはどうすればよいですか?共有オブジェクトに@OneToOne依存関係を追加できますか?しかし、私はどのように現在の日付を指定するのですか?

これは不可能ですか?シンプルなgetCurrentValue()メソッドをShareに追加して、別のクエリを発行して現在のShareValueを取得しますか?

私は何とか失われています。助けてくれてありがとう!

答えて

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

関連する問題