2016-01-22 94 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

相关问题