Я так долго боролся с этим. У меня есть база данных с двумя таблицами «продукт» и «категории»
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
Теперь я пытаюсь получить запрос на соединение в спящем режиме, чтобы я мог получить, скажем, product_name и category_name
One продукт относится только к одной категории (например, если продукт - «черная футболка», его значение для столбца «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