2011-03-06 189 views
1

我对Hibernate相当陌生,所以我不完全确定我想要做什么甚至可能(或正确的做),如果不是这样,请随时提出其他方法来实现我正在寻找的东西。Hibernate映射帮助!

我有2个实体,比赛和夹具。他们之间有一对多的关系。我知道如何设置注释来实现这一点,但我所苦苦挣扎的是使双方的关系成为双向关系。如果我的申请运行很长时间,属于比赛的赛程数量将会增加。我将访问Fixture对象的最常见方式是通过指定特定日期的比赛(例如getFixtures(今天))来进行比赛。我认为我可以通过在比赛中使用Map来实现此目的,该比赛将Fixture的日期映射到该日期的Fixtures集合。但我不知道如何在Hibernate中设置它。

下面是一组简化的POJO和注解的那说明我到目前为止有:

@Entity 
public class Competition { 

    // This is what I would like to have. 
    private Map<Date, Collection<Fixture>> fixtureMap; 

    public Collection<Fixture> getFixtures(Date day) { 
     return fixtureMap.get(day); 
    } 

    // This is all I know how to do. 
    private Collection<Fixture> fixtureList; 

    @OneToMany(mappedBy = "competition") 
    public Collection<Fixture> getFixtureList() { 
     return fixtureList; 
    } 
} 

@Entity 
public class Fixture { 

    private Competition competition; 

    @ManyToOne 
    public Competition getCompetition() { 
     return competition; 
    } 
} 

你可以从这个看我可以设置的关系,以访问整套灯具的一个竞争。但要获得一个特定的一天的灯具,我将不得不遍历整个灯具集合并检查每个灯具的日期。有什么办法可以让Hibernate处理从日期到灯具集合的映射吗?如果我能做到这一点,那么我将能够使用日期作为地图中的关键字来简单访问当天的灯具集合。

回答

0

没有直接注释可以提供帮助。你将不得不写一个查询来获取特定日期的灯具。

0
@Entity 
public class Competition 
{ 
    private Map<Date, Collection<Fixture>> fixtureMap; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "competition") 
    @MapKey("date") 
    public Collection<Fixture> getFixtures(Date day) 
    { 
     return fixtureMap.get(day); 
    } 
} 

@Entity 
public class Fixture 
{ 

    private Competition competition; 

    private Date date; 

    @Column(name="FIXTURE_DATE") 
    public Date getDate() 
    { 
     return date; 
    } 

    @ManyToOne 
    public Competition getCompetition() 
    { 
     return competition; 
    } 
} 

记住设置保存竞争对象之前的双向关系。这意味着你必须在夹具中设置竞争对象来坚持夹具对象和关系。