1

我对 Hibernate 很陌生,所以我不完全确定我想要做的事情是否可能(或正确的事情)所以如果不是,请随意提出其他方法来实现我正在寻找的东西。

我有 2 个实体,竞争和夹具。它们之间存在一对多的关系。我知道如何设置注释来实现这一点,但我正在努力使关系成为双向的。如果我的应用程序要运行很长时间,属于比赛的灯具数量会增加。我将访问 Fixture 对象的最常见方式是通过竞赛指定特定日期(例如 getFixtures(today))。我想我可以通过在 Competition 类中有一个 Map 来实现这一点,该 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 处理从日期到夹具集合的映射?如果我能做到这一点,那么我将能够使用 Date 作为 Map 中的键来简单地访问当天的 Fixtures 集合。

4

3 回答 3

0

没有直接的注释可以提供帮助。您必须编写查询以获取特定日期的灯具。

于 2011-03-06T22:17:58.547 回答
0

我相信您可以使用 Hibernate Entity Maps。以下线程将很有用:How to persist Map with Annotations You can also lookup Entity Map on the Hibernate Cheatsheet

于 2011-03-06T22:21:46.010 回答
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;
    }
}

请记住在保存 Competition 对象之前设置双向关系。这意味着您必须在夹具中设置竞争对象以保持夹具对象和关系。

于 2011-03-07T07:54:03.347 回答