我有两个模型类:Equity和EquityData。从股票到股票数据有一对一的关系。我很难让Hibernate以我想要的方式绑定。Hibernate OneToMany映射
@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;
...
}
现在的股票可以有很多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中使用它。
您可以在使用休眠sqlquery的。用它。检查这个http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/SQLQuery.html – KSHiTiJ