我需要添加多个实体对象到多对多实体。
我有组件实体:
@Entity
@Table(name = "components", schema = "public", catalog = "inventory_db")
public class Component {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "id", nullable = false)
private Integer id;
private Integer qty;
@OneToMany(mappedBy = "component")
@ToString.Exclude
List<PurchaseOrder> purchaseOrders;
}
字符串
也有一个用户实体:
@Entity
@Table(name = "users")
@Getter
@Setter
@Accessors(chain = true)
@ToString
public class User {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "id", nullable = false)
private Integer id;
@OneToMany(mappedBy = "user")
List<PurchaseOrder> purchaseOrders;
}
型
最后,我有一个PurchaseOrder实体:
@Entity
@Table(name = "purchase_order")
public class PurchaseOrder {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "id", nullable = false)
private Integer id;
@Enumerated
@Column(name = "status")
private PurchaseOrderStatus purchaseOrderStatus;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "user_id", nullable = false,
foreignKey = @ForeignKey(name = "FK_PO_USER"))
private User user;
//TODO: I need to store here List<Component> - multiple components in one order of the user
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "component_id", nullable = false,
foreignKey = @ForeignKey(name = "FK_RENT_BOOK_INFO_BOOK"))
Component component;
型
我需要一个为User在一个PurchaseOrder中存储多个组件(列表)的能力。如何通过Spring JPA解决这个问题?
1条答案
按热度按时间dfty9e191#
您可以删除
@JoinColumn
注解,并简单地将两个实体中的关系更改为@ManyToMany
。然后在PurchaseOrder中使用List. JPA Package 组件字段,然后自动创建一个名为purchase_order_component
的表,该表将保存两个实体的ID。purchaseOrder应该是这样的:
字符串
和组件:
型
你可以让spring为你添加这个属性来生成数据库模式:
型
或者这里是SQL等价物:
型