2016-01-22 3 views
0

У меня есть два объекта, которые во многих отношениях, и я не могу загрузить Set <Category> categories. Эти поля заполняются в базе данных.Spring MVC - загрузка данных из базы данных

@Entity 
@Table(name="Product") 
public class Product { 

    @Id 
    @GeneratedValue 
    private int idProduct; 
    private String status; 
    private String name; 
    @ManyToMany(fetch = FetchType.EAGER, mappedBy= "products") 
    private Set <Category> categories; 
    } 


@Entity 
@Table(name="Category") 
public class Category { 
    @Id 
    @GeneratedValue 
    private int idCategory; 
    private String name; 
    @ManyToMany(fetch = FetchType.EAGER) 
    private Set <Product> products; 
} 

Это не возвращает ничего из вида, и цикл не вращается даже один раз.

<c:forEach items="${product.categories}" var="items"> 
          <p>${items.name}</p> 
          </c:forEach> 

Я присоединяюсь к схеме. Может ли кто-нибудь написать, что делать, чтобы заставить его работать, пожалуйста? enter image description here

Это не работает.

@Entity 
@Table(name="Category") 
public class Category { 
    @Id 
    @GeneratedValue 
    private int idCategory; 
    private String name; 
    @ManyToMany(fetch = FetchType.EAGER) 
    @JoinTable(name = "Product_Category", joinColumns = { 
      @JoinColumn(name = "Category_idCategory", nullable = false, updatable = false) }, 
      inverseJoinColumns = { @JoinColumn(name = "Product_idProduct", 
        nullable = false, updatable = false) }) 

    private Set <Product> product; 

ответ

0

Hibernate представляет собой sql, который необходимо создать из аннотации на объекты. Ваш объект продукта сообщает hibernate, чтобы получить информацию о соединении SQL из объекта Category. Это из предложения mappedBy в аннотации @ManyToMany.

Когда он переходит к объекту Category, он не находит то, что ему нужно, и он просто дает пустой набор.

Большинство @ManyToMany аннотации выполнены с помощью таблицы соединений. Вот пример таблицы объединения аннотацию

@JoinTable(name = "product_to_category", joinColumns = { 
     @JoinColumn(name = "category_id", nullable = false, updatable = false) }, 
     inverseJoinColumns = { @JoinColumn(name = "product_id", 
       nullable = false, updatable = false) }) 

В зависимости от схемы, возможно, потребуется настроить выше аннотацию, чтобы он работал. Это даст вам хорошее начало.

+0

Благодарим за отзыв. Не могли бы вы рассказать мне, что именно я делаю? – Jack937

+0

Скопируйте приведенную выше аннотацию в свой код на набор объектов категории . Затем измените имя '@ JoinTable', чтобы отобразить имя таблицы. В '@ JoinColumns' измените поле имени, чтобы отобразить имя столбцов в таблице соединений. –

+0

Это не работает. – Jack937