Spring Boot:如何使用复合键创建实体
Posted
技术标签:
【中文标题】Spring Boot:如何使用复合键创建实体【英文标题】:Spring Boot: How to create an Entity with a composite key 【发布时间】:2021-01-27 21:46:19 【问题描述】:我正在使用图表为一个项目创建课程以用于练习目的,直到我偶然发现了这个order_items
:
创建Orders
或Products
之类的实体没有问题,因为我知道对于订单我只需要执行以下操作:
@Entity
@Table(name = "orders")
public class Orders
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "order_id")
private Integer orderId;
// rest of the code...
对于Products
类似:
@Entity
@Table(name = "products")
public class Products
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "product_id")
private Integer productId;
// rest of the code...
但是表order_items
有变量order_id
和item_id
,这算作复合键吗?如果是这样,这些变量在我的 OrderItems
类中应该如何显示?
@Entity
@Table(name = "order_items")
public class OrderItems
@Column(name = "order_id")
private Integer orderId;
@Column(name = "item_id")
private Integer itemId;
// rest of the code...
我检查了不同的问题,他们提到使用@IdClass
或@EmbeddableId
作为复合键,但我想先确认在这种情况下我是否应该这样做,除非不是这样,也许还有更多方法。
非常感谢您提供与此相关的意见和/或任何文章,感谢您抽出宝贵时间。
【问题讨论】:
【参考方案1】:正如你所说,你可以使用@EmbeddableId
。
这里是例子:
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder(toBuilder = true)
public class OrderItemsPK implements Serializable
private static final long serialVersionUID = 1L;
@Column(insertable = false, unique = false, updatable = false, nullable = false,name = "order_id")
private Long orderId;
@Column(insertable = false, unique = false, updatable = false, nullable = false,name = "products_id")
private Long productsId;
还有 Order Items 类。
@Entity
public class OrderItems
@EmbeddedId
private OrderItemsPK id;
@OneToOne
@JoinColumn(name = "products_id", nullable = false, unique = false, insertable = false, updatable = false, referencedColumnName = "products_id")
private Products products;
@OneToOne
@JoinColumn(name = "orders_id", nullable = false, unique = false, insertable = false, updatable = false, referencedColumnName = "orders_id")
private Order order;
private Long itemId;
【讨论】:
感谢您的回复,然后我将使用@Embeddable
,您的示例确实让我部分了解了如何执行复合键操作,但我不会将其标记为答案,因为它不是指item_id
在OrderItems
中的外观。以上是关于Spring Boot:如何使用复合键创建实体的主要内容,如果未能解决你的问题,请参考以下文章
如何在Jpa中使用所选实体创建行,RestController Spring Boot
Spring boot UUID主键实体在创建后不显示正确的ID