【发布时间】:2020-08-05 13:23:38
【问题描述】:
我已经为此苦苦挣扎了很长时间。我有一个包含两个表“产品”和“类别”的数据库
CREATE TABLE `product` (
`idproduct` int NOT NULL AUTO_INCREMENT,
`idcategory` int DEFAULT NULL,
`product_name` varchar(255) DEFAULT NULL,
`product_category` varchar(255) DEFAULT NULL,
`product_description` varchar(255) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`idproduct`),
KEY `fkcat` (`idcategory`),
CONSTRAINT `fkcat` FOREIGN KEY (`idcategory`) REFERENCES `categories` (`idcategory`)
) ENGINE=InnoDB AUTO_INCREMENT=149 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `categories` (
`idcategory` int NOT NULL AUTO_INCREMENT,
`category_name` varchar(255) NOT NULL,
`category_description` varchar(255) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`idcategory`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
现在我正在尝试获取一个休眠连接查询,以便我可以检索让我们说 产品名称和类别名称
一个产品只属于一个类别(例如,如果产品是“黑色 T 恤”,那么“idcategory”列的值将是 2。这是由外键强制执行的。 表类别条目可以与多个产品相关联(例如,“category_name”= 2 可以与多个产品相关联。
如何在休眠实体中实现这种设计?我试过了,但没有用...
@Entity
@Table(name = "product")
public class Product implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idproduct")
private int idproduct;
@Column(name = "idcategory")
private int idcategory;
@Column(name = "product_name")
private String productName;
@Column(name = "product_description")
private String productdescription;
@Column(name = "product_category")
private String productcategory;
@OneToMany(targetEntity = Categories.class, cascade = CascadeType.ALL)
@JoinColumn(name = "idcategory",referencedColumnName="idcategory")
private List<Categories> category;
@Entity
@Table(name = "categories")
public class Categories {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "idcategory")
private int idcategory;
@Column(name = "category_name")
private String category_name;
@Column(name = "category_description")
private String category_description;
查询是
SELECT p, c FROM Product p INNER JOIN p.category c
【问题讨论】: