2016-01-22 128 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獲取有關來自Category實體的SQL聯接的信息。這來自@ManyToMany註釋中的mappedBy子句。

當它轉到類別實體時,它找不到它所需的,它只是給出一個空集。

大多數@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

相關問題