【发布时间】:2020-05-20 07:13:02
【问题描述】:
有 2 个实体:订单和产品。 1 个订单可以有多个产品,多个产品可以属于 1 个订单(每个产品只属于 1 个订单)。
通过 Order Entity 的单向关联,我可以在执行 orderRepo.findAll() 时检索产品详细信息;同理,执行productRepo.findAll()时需要订单明细;
尝试过的代码:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "order_details")
public class OrderData {
@Id
@Column(name = "order_id", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long orderId;
@NotNull
@Column(name = "customer_name", nullable = false)
private String customerName;
@OneToMany(mappedBy = "productId", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<ProductData> products;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "product_details")
public class ProductData {
@Id
@Column(name = "product_id", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long productId;
@NotNull
@Column(name = "product_name", nullable = false)
private String productName;
@ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.ALL)
@JoinColumn(name = "order_id", nullable = false)
private OrderData orderData;
}
在插入产品时;我们收到错误:“插入或更新表违反了外键约束 jpa”
在执行 productRep.findAll() 时:休眠选择查询的无限循环
试过@JsonIgnore。这不会返回子元素或父元素。 尝试过 @JsonManagedReference 与 @JsonBackReference - 仍然没有运气。
请指导我
【问题讨论】:
-
您是否将数据库中存在的任何 Order 实例绑定到新产品?您将 OrderData 字段声明为不可为空,因此您必须在那里传递一个对象。
-
更新代码为 nullable=true;能够在 productRepo.findAll() 在 ide 控制台中打印无限休眠选择调用时仍然插入元素
标签: java postgresql hibernate spring-data-jpa