2010-07-06 2 views
2

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

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

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

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

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

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

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

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

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

+0

Это сделало. Благодарю. Тем не менее, я застрял на J2EE 5, а @OrderColumn доступен только в J2EE 6. Я нахожусь на Mac, и мне кажется, мне нужно обновиться до Snow Tiger. – richever

Смежные вопросы