我正在尝试创建类别和产品类之间的关系。我认为多对多关系是最合适的。然而,当我运行应用程序时,我得到了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<>();
}