Цикл Hibernate многие-ко-многим в JSP - PullRequest
1 голос
/ 03 марта 2012

У меня возникли некоторые проблемы при работе с отношениями @ManyToMany здесь. Я понимаю, что используя @JoinTable, а не создавая класс ManyToMany, это довольно просто.

С помощью этого метода в JSP цикл через коллекцию очень прост. Я скопировал мой пример отсюда: http://www.mkyong.com/hibernate/hibernate-many-to-many-relationship-example-annotation/ Допустим, у нас есть коллекция акций, которые содержат коллекцию категорий.

<c:forEach var="stock" items="${parentItem.stocks}">
    <div>Stock id: ${stock.id}</div>
    <c:forEach var="category" items="${stock.categories}">
        <div style="padding-left:15px">Category id: ${category.id}</div>
    </c:forEach>
</c:forEach>
Output:
Stock id: 1
    Category id: 1
    Category id: 2
Stock id: 2
    Category id: 1
    Category id: 3
....

Мой проект требует, чтобы моя таблица ManyToMany содержала пользовательский столбец. Насколько я понимаю, мне нужно определить ассоциативную таблицу в коде, чем. Так что теперь родительский элемент содержит коллекцию StocksCategories, которая содержит акции и категории. Итак, с моими требованиями и при рассмотрении этого примера определения таблицы ManyToMany: http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/ это немного меняет ситуацию. Так что теперь цикл через это становится немного сложнее.

<c:forEach var="currentStockCategory" items="${parentItem.stocksCategories}">
    <div>${currentStockCategory.stock.id}</div>
    <c:forEach var="innerStockCategory" items="${currentStockCategory.stock.stocksCategories}"> // back up the tree
        <div>${innerStockCategory.category.id}</div>
    </c:forEach>
</c:forEach>
Output:
Stock id: 1
    Category id: 1
    Category id: 2
Stock id: 1
    Category id: 1
    Category id: 2
Stock id: 2
    Category id: 1
    Category id: 3
Stock id: 2
    Category id: 1
    Category id: 3
....

Как вы можете видеть, он просматривает каждую запись в ассоциативной таблице stocksCategories. Я не хочу этого, мне нужно, чтобы он отображался как первый. Технически говоря, список категорий по-прежнему является частью этого объекта, но как я могу сделать так, чтобы он отображался в jsp? Сама идея восстановления структуры базы данных кажется неправильной.

Я не могу запросить коллекцию акций и сохранить ее отдельно, я должен держать ее подключенной к родительскому объекту.

Я боролся с этим уже около недели, поэтому любая помощь будет высоко ценится! Благодарю. stocks

1 Ответ

0 голосов
/ 04 марта 2012

Я не понимаю, что вы пытаетесь сделать во втором примере, почему вы изменили контекст внешнего цикла с акций на категории акций? Если таблицы сопоставлены правильно, все, что вам нужно сделать, это пересечь второе отношение во внутреннем цикле.

Первый пример будет изменен следующим образом, чтобы добавить фактическую сущность, представляющую таблицу соединения:

<c:forEach var="stock" items="${parentItem.stocks}">
    <div>Stock id: ${stock.id}</div>
    <c:forEach var="stockCategory" items="${stock.stocksCategories}">
        <div style="padding-left:15px">Category id: ${stockCategory.category.id}</div>
    </c:forEach>
</c:forEach>

-

Для трехстороннего присоединения, почему бы просто не сделать это?

<c:forEach var="stockCategory" items="${parentItem.stocksCategories}">
    <div>Stock id: ${stockCategory.stock.id}</div>
    <div style="padding-left:15px">Category id: ${stockCategory.category.id}</div>
</c:forEach>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...