我有一个名为Product
的实体,它具有同一实体的外键,用于指示子产品。
我需要在两种不同情况下选择所有产品
首先,获得所有相关产品(工作) 第二,获得所有没有关系的产品(不工作)
@Entity
@Table(name = "product")
public class Product {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
private String name;
private String description;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="product_id")
private Product parentProduct;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Product getParentProduct() {
return parentProduct;
}
public void setParentProduct(Product parent_product_id) {
this.parentProduct = parent_product_id;
}
}
当我尝试
时public Product getProductByIdWithoutRelation(Integer id) {
return productRepository.findById(id);
}
使用存储库代码中的以下方法
Product findById(Integer id);
我收到了这个错误
.wsmsDefaultHandlerExceptionResolver:无法编写HTTP消息:org.springframework.http.converter.HttpMessageNotWritableException:无法编写JSON:没有为类org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer找到序列化程序,也没有发现要创建的属性BeanSerializer(为了避免异常,禁用SerializationFeature.FAIL_ON_EMPTY_BEANS);嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:没有为类org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer找到序列化器,也没有发现创建BeanSerializer的属性(为了避免异常,禁用SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链) :model.Product [" parentProduct"] - > model.Product _ $$ _ jvst726_0 [" handler"])
感谢您的帮助!
答案 0 :(得分:0)
你需要使用Jackson Hibernate datatype integration来处理延迟加载的关系问题,这些问题通常伴随着Jackson与Hibernate实体一起使用。您可以在不同的答案中查看here,了解如何在不同的弹簧环境中进行配置。