Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据JPA-Hibernate-OneToMany,多通双向_Java_Postgresql_Hibernate_Spring Data Jpa - Fatal编程技术网

Java Spring数据JPA-Hibernate-OneToMany,多通双向

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 {

有两个实体:订单和产品。一个订单可以有多个产品,多个产品可以属于一个订单(每个产品只属于一个订单)

通过订单实体的单向关联,我能够在执行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;
}
@数据
@诺尔格构装师
@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选择调用时,仍然能够插入元素