Справка по Hibernate Mapping! - PullRequest
1 голос
/ 07 марта 2011

Я совершенно новичок в Hibernate, поэтому я не совсем уверен, возможно ли то, что я хочу сделать (или правильно), поэтому, если это не так, не стесняйтесь предлагать другие способы достижения того, что я ищу для.

У меня есть 2 сущности: соревнование и приспособление. Между ними существует связь «один ко многим». Я знаю, как настроить аннотации для достижения этой цели, но я борюсь с тем, чтобы сделать отношения двунаправленными. Если бы мое приложение работало в течение длительного времени, количество приборов, принадлежащих соревнованию, увеличилось бы. Самый распространенный способ получения доступа к объектам Fixture - через соревнование, указав определенную дату (например, getFixtures (сегодня)). Я думал, что смогу реализовать это, имея карту в классе Соревнования, которая отображает дату Крепления на коллекцию Креплений на эту дату. Я не знаю, как настроить это в 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;
    }
}

Как вы можете видеть из этого, я могу установить отношения, чтобы получить доступ ко всему набору приборов для соревнования. Но чтобы получить Fixtures на определенный день, мне нужно было бы перебрать всю коллекцию Fixtures и проверить даты каждого. Есть ли какой-нибудь способ, которым я могу заставить Hibernate обрабатывать отображение из Date в Collection of Fixtures? Если бы я мог это сделать, то я мог бы просто получить доступ к коллекции приборов на этот день, используя дату в качестве ключа на карте.

Ответы [ 3 ]

0 голосов
/ 07 марта 2011

Полагаю, вы можете использовать Hibernate Entity Maps. Следующая ветка будет полезна: Как сохранить карту с аннотациями Вы также можете найти карту сущностей в Hibernate Cheatsheet

0 голосов
/ 07 марта 2011
@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;
    }
}

Не забудьте установить двунаправленные отношения перед сохранением объекта Соревнования.Это означает, что вы должны установить объект соревнования внутри прибора, чтобы сохранить объект светильника и отношения.

0 голосов
/ 07 марта 2011

Никакая прямая аннотация не может помочь. Вам нужно будет написать запрос на выборку приборов с определенной датой.

...