【问题标题】:Spring Data JPA - Hibernate - OneToMany, ManytoOne bidirectionalSpring Data JPA - Hibernate - OneToMany,ManytoOne 双向
【发布时间】: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


【解决方案1】:

mappedBy 属性指向了错误的字段:

@OneToMany(mappedBy = "productId", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<ProductData> products;

这必须是后向引用:

@OneToMany(mappedBy = "orderData", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<ProductData> products;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2021-07-14
    • 2019-02-24
    相关资源
    最近更新 更多