如何基于含List属性的Java实体创建SQL表?
如何处理Java实体中List集合对应的数据库表设计
核心逻辑
Java中的List<OrderItem>对应关系型数据库的一对多关联:一个Order可以对应多个OrderItem,这种关系不需要在Order表中直接存储集合字段,而是通过在OrderItem表中添加指向Order的外键来实现关联。
修正你的SQL脚本(附错误说明)
你的原脚本存在几个问题:
order是SQL关键字,直接用做表名会报错,需要用反引号(`)包裹orderItem表的AUTO_INCREENT拼写错误,应为AUTO_INCREMENTINT(999999)无实际意义,INT后的括号是显示宽度而非数值上限,直接使用INT即可;若需要更大数值范围,可改用BIGINT- 无需在
Order表中添加itens字段,集合关系由外键关联实现
修正后的完整SQL:
CREATE TABLE product ( id INT AUTO_INCREMENT PRIMARY KEY, description VARCHAR(50) NOT NULL, value NUMERIC(10,2) NOT NULL ); -- 用反引号包裹关键字order CREATE TABLE `order` ( id BIGINT AUTO_INCREMENT PRIMARY KEY, -- 对应Java的Long类型,用BIGINT更匹配 id_person INT NOT NULL, -- 若Person为必填,建议添加NOT NULL约束 FOREIGN KEY (id_person) REFERENCES person(id) -- 外键约束单独定义更规范 ); -- 数据库命名建议用下划线分隔(order_item),符合行业惯例 CREATE TABLE order_item ( id BIGINT AUTO_INCREMENT PRIMARY KEY, -- 对应Java的long类型 id_product INT NOT NULL, quantity INT NOT NULL, id_order BIGINT NOT NULL, FOREIGN KEY (id_product) REFERENCES product(id), FOREIGN KEY (id_order) REFERENCES `order`(id) );
关联查询示例
当需要获取某个订单对应的所有商品项时,通过外键查询即可:
SELECT * FROM order_item WHERE id_order = 目标订单ID;
后续使用ORM框架(如MyBatis、JPA)时,框架会自动将查询结果映射为Java中的List<OrderItem>集合。
内容的提问来源于stack exchange,提问作者Paulo Henrique
相关产品推荐
相关产品推荐

