4

Equity と EquityData の 2 つのモデル クラスがあります。Equity から EquityData への OneToMany 関係があります。Hibernate を思い通りにバインドするのに苦労しています。

@Entity
@Table(name="equities")
public class Equity
{
    @Id
    @GeneratedValue
    @Column(name="Equity_ID")
    private Integer id;

    private String symbol;

    @OneToMany(mappedBy="equity")
    private List<EquityData> equityData;
    ...
}


@Entity
public class EquityData 
{   
    @Id
    @GeneratedValue
    @Column(name="id")
    private Integer id;

    @ManyToOne
    @JoinColumn(name="Equity_ID")
    private Equity equity;

    @Column(name="quote_time") private Date quoteTime;
    @Column(name="quote_type_id") private Integer quoteTypeId;
    @Column(name="value") private BigDecimal value;
    ...
}

現在、Equity は多くの EquityQuotes を持つことができますが、常に "最新の" 見積もり (最新の quoteTime を持つもの) が存在します。現在、Hibernate をエンティティにバインドする方法で、Equity とすべての EquityData を取得します。EquityDataType ごとに最新の EquityData を取得したいだけです (つまり、昨日のデータは気にせず、今日のデータだけです)。

SQL では、次のようになります。

select d.equity_id, d.quote_type_id, d.value, max(quote_time) 
from equities e, equity_data d
where e.equityID = d.equity_id and e.symbol = :symbol
group by d.equity_id, d.quote_type_id;

助けていただければ幸いです!関係ないと思いますが、Stripes Web Framework でこれを使用しています。

4

3 に答える 3

0

@Where 句を追加して、今日から EquityData のみを復元する別のフィールドを作成できます。

@OneToMany(mappedBy = "equity")
@Where(clause = "quoteTime >= TODAY")
private List<EquityData> equityDataFromToday;

次に、 EquityData (すべてを含む) の代わりに、フィールド EquityDataFromToday を使用してデータにアクセスする必要があります。

于 2014-05-26T15:46:28.853 に答える
0

次のように、データベースから最新の見積もりを取得する基準を設定できます。

Criteria crit = session.createCriteria(Equity.class);
//your criteria goes here....
crit.createCriteria(last_quoted);
List<?> entity = crit.list();
for(Iterator<?> it = equity.iterator();it.hasNext();){
Equity equity = (Equity) it.next();
//print the latest quotes based on the criteria you provided
}
session.close();
}
//catch(Exception e){ //display exeption;}
于 2012-11-30T10:06:35.347 に答える
0

エクイティ データ リストでフェッチ タイプを LAZY に設定し、名前付きクエリを記述して、今日のエクイティ データのみをフェッチできます。Hibernate を使用しているため、Criteria API を使用してこれを実現することもできます。

于 2012-11-30T04:58:55.680 に答える