我无法在春季启动休眠中创建多对多关系



我正在尝试创建类别和产品类之间的关系。我认为多对多关系是最合适的。然而,当我运行应用程序时,我得到了org.hibernate.MappingException: property-ref [_com_eCommerce_ecommerce_model_Product_listOfCategories] not found on entity [com.eCommerce.ecommerce.model.Product]错误。有什么问题吗?

这是我的Product类。

package com.eCommerce.ecommerce.model;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@NoArgsConstructor
@Entity
@Getter
@Setter
@Table(name="Product")
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private int productId;
    private int stockNumber;
    @ManyToMany
    @JoinTable(name = "products_categories",
    joinColumns = {
            @JoinColumn(name = "product",referencedColumnName = "productId",nullable = false,updatable = false)
    },
    inverseJoinColumns = {
            @JoinColumn(name = "category",referencedColumnName = "categoryName",nullable = false,updatable = false)
    })
     Set<Category> listOfCategories = new HashSet<>();
}

类别类

package com.eCommerce.ecommerce.model;

import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Data
@NoArgsConstructor
@Entity
@Table(name = "Category")
public class Category {
    private int categoryParentNumber;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private int categoryId;
    private String categoryName;
    @ManyToMany(mappedBy = "listOfCategories",fetch = FetchType.LAZY)
    private Set<Product> listOfProducts = new HashSet<>();
    
}

问题是列命名。

列名不是productId,而是product_id,为了能够使用referencedColumnName,您必须使用@Column(name = "product_id")命名。

也引用列必须是@Id和categoryName不是@Id

工作的例子:

@Entity
public class Product {
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  @Column(name = "product_id", nullable = false)
  private int productId;
  private int stockNumber;
  @ManyToMany(cascade = { CascadeType.ALL })
  @JoinTable(
        name = "products_categories_j",
        joinColumns = {
                @JoinColumn(name = "product_id", referencedColumnName = "product_id", nullable = false,updatable = false)
        },
        inverseJoinColumns = { @JoinColumn(name = "category_id", referencedColumnName = "category_id", nullable = false, updatable = false) }
  )
  private Set<Category> listOfCategories = new HashSet<>();
}

@Entity
public class Category {
  private int categoryParentNumber;
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  @Column(name = "category_id", nullable = false)
  private int categoryId;
  @Column(name = "category_name", nullable = false)
  private String categoryName;
  @ManyToMany(mappedBy = "listOfCategories", fetch = FetchType.LAZY)
  private Set<Product> listOfProducts = new HashSet<>();
}

最新更新