Управление упорядочением строк таблицы соединений с помощью аннотаций Hibernate - PullRequest
2 голосов
/ 06 июля 2010

Я сделал нечто подобное с файлами hbm, но до сих пор не нашел эквивалента с использованием аннотаций.То, что я хотел бы сделать, это создать ассоциацию через таблицу соединений, где таблица соединений содержит столбец заказа для ассоциации (извините за неправильную терминологию здесь).В самом простом случае таблицы могут выглядеть так:

Table: Menus
-----
menu_id

Table: Items
-----
item_id

Table: Menus_Items
----
menu_id
item_id
order_by

Если бы я не требовал, чтобы пункты меню были упорядочены (это столбец order_by), я мог бы сделать это без проблем;однако я хотел бы иметь возможность программно упорядочивать элементы в таблице Menus_Items либо в модульных тестах, либо в инструменте администратора.Так что для этого, я думаю, мне также понадобится класс MenuItems, верно?

Мой вопрос: какие аннотации необходимы для соответствующих классов, чтобы это произошло?Классы могут выглядеть примерно так (насколько я знаю):

public class Menu {
    private List<MenuItem> items;

    // ...

    @OneToMany
    @JoinTable(name = "Menus_Items", 
        joinColumns = @JoinColumn(name = "menu_id"), 
        inverseJoinColumns = @JoinColumn(name = "item_id"))
    @Cascade(value = { CascadeType.ALL, CascadeType.DELETE_ORPHAN })
    @IndexColumn(name = "order_by")
    public List<MenuItem> getItems() { // ...
    }

}   // end class Menu

Правильно ли @IndexColumn?Программно, как мне указать порядок коллекции MenuItems?Что я могу делать не так?У меня есть ноющее чувство, что я упускаю что-то очевидное.

Любая помощь очень ценится.

1 Ответ

1 голос
/ 06 июля 2010

однако я хотел бы иметь возможность программно упорядочивать элементы в таблице Menus_Items либо в модульных тестах, либо в инструменте администратора.Так что для этого, я думаю, мне также понадобится класс MenuItems, верно?

Если это действительно много ко многим, то то, что у вас есть, правильно.Но вам не нужен объект для таблицы соединений (подробнее об этом позже).

Мой вопрос: какие аннотации необходимы для соответствующих классов, чтобы это произошло?Классы могут выглядеть примерно так (насколько я знаю)

Как я уже говорил, вам не нужна эта сущность MenuItem для таблицы соединений, и я ожидаювместо этого ManyToMany между Menu и Item (раздел 2.2.5.3.4. Индексированные коллекции (Список, Карта) в справочной документации).

Является ли @IndexColumn правильным?Программно, как мне указать порядок коллекции MenuItems?

Специфичный для Hibernate @IndexColumn правильный.Но если вы используете реализацию JPA 2.0, вы должны предпочесть стандартную аннотацию @OrderColumn (пример здесь ).

Что касается порядка, вы используетеупорядоченный набор (List), и порядок определяется по порядку элементов в List (точнее, их индекс будет храниться в базе данных).Так что просто закажите Item как вам нравится в List<Item>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...