java - Spring-Data-Jpa 中一对多映射的 JSON 结果错误

标签 java json spring-boot spring-data-jpa one-to-many

所有者实体:PriceListItemTest.java

@JsonPropertyOrder({"pricingUOMCode","lineTypeCode","primaryPricingUOMFlag","priceListId","itemId","priceListItemId"})
@Entity
@Table(name = "QP_PRICE_LIST_ITEMS")
public class PriceListItemTest implements Serializable{

    @Column(name = "price_list_item_id")    
    private String priceListItemId;

    @Column(name = "pricing_uom_code")  
    private String pricingUOMCode; 

    @Column(name = "line_type_code")    
    private String lineTypeCode; 

    @Column(name = "primary_pricing_uom_flag")  
    private String primaryPricingUOMFlag;

    @Id
    @Column(name = "item_id")   
    private String itemId;

    @OneToMany(mappedBy = "priceListItemsTest", cascade = CascadeType.ALL)
    private List<ItemDetailTest> itemDetailsTest;

    // getters and setters
}

和 Entity2:ItemDetailTest.java

@JsonPropertyOrder({"itemNumber","inventoryItemId","organizationId"})
@Entity
@Table(name = "egp_system_items_b")
public class ItemDetailTest implements Serializable {

    @Id
    @Column(name = "inventory_item_id") 
    private String inventoryItemId; 

    @Column(name = "item_number")   
    private String itemNumber; 

    @Column(name = "organization_id")   
    private String organizationId;


//   To be used for bidirectional   
    @ManyToOne//(fetch = FetchType.LAZY)
    private PriceListItemTest priceListItemsTest;

    // getters and setters
}

RestController 在检索 JSON 结果时返回错误。

{
    "timestamp": "2018-10-23T14:05:26.248+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "Could not write JSON: could not extract ResultSet; nested exception is com.fasterxml.jackson.databind.JsonMappingException: could not extract ResultSet (through reference chain: java.util.ArrayList[0]->com.Pricing.Pricing_App.model.PriceListItemTest[\"itemDetailsTest\"])",
    "path": "/getByItemIdTest"
}

可能是映射oneTomany有误。
如果它具有 oneToone 映射但面临 OneToMany 问题,则它工作正常。 有人可以帮我解决这个错误吗?

编辑: Controller :

@RestController
public class PriceListItemControllerTest {

    @Autowired
    private PriceListItemRepositoryTest priceListItemRepositoryTest;

    @GetMapping(value="/getByItemIdTest")
    public List<PriceListItemTest> getByItemIdTest(@RequestParam("itemId") String itemId) {
        return priceListItemRepositoryTest.findByItemId(itemId);
    }

}

最佳答案

像下面这样改变你的模型类:

@Entity
@Table(name = "QP_PRICE_LIST_ITEMS")
public class PriceListItemTest implements Serializable {

    private static final long serialVersionUID = -748956247024967638L;

    @Basic
    @Column(name = "price_list_item_id")    
    private String priceListItemId;

    @Basic
    @Column(name = "pricing_uom_code")  
    private String pricingUOMCode; 

    @Basic
    @Column(name = "line_type_code")    
    private String lineTypeCode; 

    @Basic
    @Column(name = "primary_pricing_uom_flag")  
    private String primaryPricingUOMFlag;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "item_id")   
    private String itemId;

    @JsonManagedReference
    @OneToMany(mappedBy = "priceListItemsTest", cascade = CascadeType.ALL)
    private List<ItemDetailTest> itemDetailsTest;

    // getters and setters
}

@Entity
@Table(name = "egp_system_items_b")
public class ItemDetailTest implements Serializable {

    private static final long serialVersionUID = 8495817802073010928L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "inventory_item_id") 
    private String inventoryItemId; 

    @Basic
    @Column(name = "item_number")   
    private String itemNumber; 

    @Basic
    @Column(name = "organization_id")   
    private String organizationId;

    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "fk_item_id", nullable = false) // name of the foreign key column
    private PriceListItemTest priceListItemsTest;

    // getters and setters
}

在您的 JoinColumn 中提供外键字段的实际名称。它应该可以工作,因为 Jackson 会自动序列化。

对于一对多引用,您可以点击以下链接:link1link2

关于java - Spring-Data-Jpa 中一对多映射的 JSON 结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52951336/

相关文章:

java - JSON 数组反序列化导致 Dalvik VM 崩溃

java - tomcat上部署后视频格式和MIME类型错误

java - eventsource-android 从 Flux 服务器端点返回空数据字符串

JavaFX - 由 : java. lang.UnsupportedOperationException : Unable to open DISPLAY? 引起

java - 有没有一种方法可以通过每个节点可用的行号通过 SAX/DOM 解析 XML

java - 如何在 JAVA 中使用 JSON 对象填充速度字符串?

sql - 选择/查询 "into"JSON 数组

spring - 如何在没有spring-boot的情况下使用eureka+feign?

java - Netbeans CRUD 应用程序中的错误

java - 在 Windows 上使用 Cygwin 排序时出现 "Input file specified two times."错误