J'ai deux classes de modèles: Equity et EquityData. Il existe une relation OneToMany de Equity à EquityData. J'ai du mal à faire en sorte que Hibernate se lie comme je le souhaite.Hibernate OneToMany mapping
@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;
...
}
maintenant Equity peut avoir beaucoup EquityQuotes, mais il y aura toujours une citation « le plus récent » (celui avec la dernière quoteTime). À l'heure actuelle, la façon dont j'ai Hibernate lier à mes entités, ça va récupérer l'Equity et tous les EquityData. Je veux seulement qu'il récupère les derniers EquityData pour chaque EquityDataType (c.-à-d. Je ne me soucie pas des données d'hier, juste aujourd'hui).
Dans SQL, il ressemblerait à ceci:
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;
Je vous remercie de toute aide! Je ne pense pas que cela soit important, mais je l'utilise dans le cadre Web de Stripes.
vous pouvez utiliser sqlquery en veille prolongée. utilise le. vérifier ceci http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/SQLQuery.html – KSHiTiJ