Java Hibernate单域映射

Java Hibernate单域映射,java,hibernate,jpa,Java,Hibernate,Jpa,我有两个模型类:Equity和EquityData。从股权到股权数据之间存在着一种单一的关系。我很难让Hibernate按我希望的方式绑定 @Entity @Table(name="equities") public class Equity { @Id @GeneratedValue @Column(name="Equity_ID") private Integer id; private String symbol; @OneToMany(

我有两个模型类:Equity和EquityData。从股权到股权数据之间存在着一种单一的关系。我很难让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;
    ...
}

我将感谢任何帮助!我认为这无关紧要,但我在Stripes Web框架中使用了它。

您可以在权益数据列表中将获取类型设置为LAZY,然后编写命名查询,只获取今天的权益数据。由于您使用Hibernate,您也可以使用CriteriaAPI实现此目的。

您可以设置从数据库获取最新报价的条件,如:

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;}
crit=session.createCriteria(Equity.class);
//你的标准在这里。。。。
标准createCriteria(最后一次引用);
列表实体=crit.List();
for(Iterator it=equity.Iterator();it.hasNext();){
权益=(权益)it.next();
//根据您提供的条件打印最新报价
}
session.close();
}
//catch(异常e){//display exeption;}

您可以创建另一个字段,仅恢复当前的EquityData,并在其中添加@Where子句:

@OneToMany(mappedBy = "equity")
@Where(clause = "quoteTime >= TODAY")
private List<EquityData> equityDataFromToday;
@OneToMany(mappedBy=“equity”)
@其中(子句=“quoteTime>=今天”)
私有列表equityDataFromToday;

然后,您必须使用equityDataFromToday字段来访问数据,而不是equityData(将包含所有数据)

您可以在hibernate中使用sqlquery。使用它。检查这个
@OneToMany(mappedBy = "equity")
@Where(clause = "quoteTime >= TODAY")
private List<EquityData> equityDataFromToday;