我有一个类别表。
createTable.sql
CREATE TABLE IF NOT EXISTS `product_category` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,
`category_name` varchar(10) NOT NULL,
`parent_category_id` int(11) DEFAULT NULL,
`created_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_by` int(11) NOT NULL,
PRIMARY KEY (`category_id`),
KEY `created_by` (`created_by`),
KEY `parent_category_id` (`parent_category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11
ProductCategory.java
import java.sql.Timestamp;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
@Entity
@Table(name="product_category")
public class ProductCategory {
private int categoryId;
private String categoryName;
private Integer parentCategoryId;
private Timestamp createdOn;
private int createdBy;
@Id @GeneratedValue(strategy=IDENTITY)
@Column(name="category_id", unique=true, nullable=false)
public int getCategoryId() {
return categoryId;
}
public void setCategoryId(int categoryId) {
this.categoryId = categoryId;
}
@Column(name="category_name", nullable=false, length=100)
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
@Column(name="parent_category_id")
public Integer getParentCategoryId() {
return parentCategoryId;
}
public void setParentCategoryId(Integer parentCategoryId) {
this.parentCategoryId = parentCategoryId;
}
@Column(name="created_on")
public Timestamp getCreatedOn() {
return createdOn;
}
public void setCreatedOn(Timestamp createdOn) {
this.createdOn = createdOn;
}
@Column(name="created_by")
public int getCreatedBy() {
return createdBy;
}
public void setCreatedBy(int createdBy) {
this.createdBy = createdBy;
}
public ProductCategory(String categoryName) {
this.categoryName = categoryName;
}
public ProductCategory() {
}
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="parent_category_id")
private ProductCategory subcategory;
@OneToMany(mappedBy="subcategory")
private Set<ProductCategory> subordinates=new HashSet<ProductCategory>();
}
答案 0 :(得分:0)
@ManyToOne
@JoinColumn(name = "parent_category_id")
public ProductCategory getParentCategory() {
return parentCategory;
}
public void setParentCategoryId(ProductCategory parentCategory) {
this.parentCategory = parentCategory;
}
使用类似的内容添加对父类别的引用。
您可以以相同的方式为子类别列表添加@OneToMany
答案 1 :(得分:0)
您已提及&#34; parent_category_id &#34;你的代码两次。只需在&#34; @JoinColumn(name =&#34; parent_category_id&#34;)&#34;。以下是您的要求的最终映射:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="category_id", unique=true, nullable=false)
private int categoryId;
@Column(name="category_name", nullable=false, length=100)
private String categoryName;
@Column(name="created_on")
private Timestamp createdOn;
@Column(name="created_by")
private int createdBy;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="parent_category_id")
private ProductCategory subcategory;
@OneToMany(mappedBy="subcategory")
private Set<ProductCategory> subordinates=new HashSet<ProductCategory>();