在WildFly中,我定义了一个这样的实体:
@Entity
@Table("OrderTable")
@JsonIgnoreProperties(ignoreUnknown = true)
public class OrderEntity {
private List<ItemEntity> items;
@OneToMany(targetEntity = ItemEntity.class, cascade=CascadeType.ALL)
@JoinColumn(name="ITEM_ID")
public List<ItemEntity> getItems() {...}
public void setItems(List<ItemEntity> items) {...}
}
然后使用 JaxRS,我定义它来检索数据
@GET
@Path("/{id}")
public Response getOrder(@PathParam("id") String id) {
OrderEntity order= orderService.retrieveOrder(id);
return Response.ok(order).build()
}
我的问题是,虽然 orderService 业务层返回订单实体没有问题,但当我尝试返回映射到 JSON 的 Response.ok() 时,它会抱怨我的项目未加载:“无法延迟初始化集合角色”
这是否意味着我必须加载所有关系才能使这项工作正常进行,即使我不需要访问项目关系?
如果你没有明确说明,JSON 不知道你需要什么。
解决方法:
@JsonIgnore
添加到 getItems
。cascade=EAGER
以加载项目(如果您确实需要它们)。@Transaction
添加到 getOrder
方法来加载项目(不推荐这种方式,但从技术上讲它有帮助)。