Java Spring Boot:如何使用复合键创建实体
我正在为一个项目创建我的类,使用图表进行练习,直到我偶然发现了这个Java Spring Boot:如何使用复合键创建实体,java,spring-boot,orm,hibernate-mapping,Java,Spring Boot,Orm,Hibernate Mapping,我正在为一个项目创建我的类,使用图表进行练习,直到我偶然发现了这个order\u items: 我创建一个像订单或产品这样的实体没有问题,因为我知道,对于订单,我只需要执行以下操作: @Entity @Table(name = "orders") public class Orders { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "orde
order\u items
:
我创建一个像订单
或产品
这样的实体没有问题,因为我知道,对于订单,我只需要执行以下操作:
@Entity
@Table(name = "orders")
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "order_id")
private Integer orderId;
// rest of the code...
}
@Entity
@Table(name = "products")
public class Products {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "product_id")
private Integer productId;
// rest of the code...
}
对于产品
类似:
@Entity
@Table(name = "orders")
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "order_id")
private Integer orderId;
// rest of the code...
}
@Entity
@Table(name = "products")
public class Products {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "product_id")
private Integer productId;
// rest of the code...
}
但是表order\u items
包含变量order\u id
和item\u 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
或@embeddedableid
,但我想首先确认在这种情况下我是否应该这样做,除非不是这样,否则可能还有更多的方法
我非常感谢您的意见和/或与此相关的任何文章,谢谢您的时间。如您所述,您可以使用
@embeddedableid
下面是一个例子:
@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;
}
感谢您的回复,我将使用
@embeddeble
,然后,您的示例确实给了我一个如何处理复合键的部分想法,但我不会将其标记为答案,因为它没有提到项id
在订单项中应该如何查看。