2011-03-06 188 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; 
    } 
} 

記住設置保存競爭對象之前的雙向關係。這意味着你必須在夾具中設置競爭對象來堅持夾具對象和關係。