Java Spring数据JPA-Hibernate-OneToMany,多通双向
有两个实体:订单和产品。一个订单可以有多个产品,多个产品可以属于一个订单(每个产品只属于一个订单) 通过订单实体的单向关联,我能够在执行orderRepo.findAll()时检索产品详细信息;同样,在执行productRepo.findAll()时需要订单详细信息 试用代码:Java Spring数据JPA-Hibernate-OneToMany,多通双向,java,postgresql,hibernate,spring-data-jpa,Java,Postgresql,Hibernate,Spring Data Jpa,有两个实体:订单和产品。一个订单可以有多个产品,多个产品可以属于一个订单(每个产品只属于一个订单) 通过订单实体的单向关联,我能够在执行orderRepo.findAll()时检索产品详细信息;同样,在执行productRepo.findAll()时需要订单详细信息 试用代码: @Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "order_details") public class OrderData {
@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;
}
@数据
@诺尔格构装师
@AllArgsConstructor
@实体
@表(name=“订单详细信息”)
公共类OrderData{
@身份证
@列(name=“order\u id”,null=false,unique=true)
@GeneratedValue(策略=GenerationType.IDENTITY)
私有长orderId;
@NotNull
@列(name=“customer\u name”,null=false)
私有字符串客户名称;
@OneToMany(mappedBy=“productId”,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
私人套装产品;
}
@资料
@诺尔格构装师
@AllArgsConstructor
@实体
@表(name=“产品详细信息”)
公共类产品数据{
@身份证
@列(name=“product_id”,null=false,unique=true)
@GeneratedValue(策略=GenerationType.IDENTITY)
私有长productId;
@NotNull
@列(name=“product_name”,null=false)
私有字符串产品名称;
@manytone(fetch=FetchType.LAZY,可选=false,cascade=CascadeType.ALL)
@JoinColumn(name=“order\u id”,null=false)
私有OrderData OrderData;
}
在插入产品时;我们收到错误:“表上的插入或更新违反了外键约束jpa”
执行productRep.findAll()时:hibernate select查询的无限循环
尝试了@JsonIgnore。这不会返回子元素或父元素。
尝试了@JsonManagedReference与@JsonBackReference-仍然没有成功
请在这方面指导我mappedBy属性指向错误的字段:
@OneToMany(mappedBy = "productId", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<ProductData> products;
@OneToMany(mappedBy=“productId”,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
私人套装产品;
这必须是反向引用:
@OneToMany(mappedBy = "orderData", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<ProductData> products;
@OneToMany(mappedBy=“orderData”,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
私人套装产品;
是否将数据库中的任何订单实例绑定到新产品?您将OrderData字段声明为不可为null,因此必须在那里传递一个对象;当productRepo.findAll()在ide控制台中打印无限的hibernate选择调用时,仍然能够插入元素