我刚开始使用Netbeans提供的Restfull Web服务。
我创建了两个实体。首先是玩家,第二个是 VehicleDetail 。两者都有ManyToMany关系:
播放器:
@ManyToMany(mappedBy = "players", fetch = FetchType.LAZY)
private List<VehicleDetail> vehicleDetails;
VehicleDetail
@ManyToMany(fetch = FetchType.LAZY)
private List<Player> players;
我创建了JSP页面,您可以在其中创建新的Players和VehicleDetails。我为我的实体添加了Restfull Web服务。他们将向我提供有关实体的信息作为JSON。
当我通过JSP页面添加新的Players和VehicleDetails然后我通过GET HTTP方法测试Restfull服务时,它显示了正确的JSON。
然后我将VehicleDetail添加到我的玩家列表和Player to VehicleDetails列表并更新了它们:
Player player = db.getPlayer(playerId);
VehicleDetail detail = db.getVehicleDetail(detailId);
player.getVehicleDetails().add(detail);
detail.getPlayers().add(player);
db.updateObject(player);
db.updateObject(detail);
db.updateObject(Object o)的代码是:
@Override
public void updateObject(Object o) {
em.merge(o);
em.flush();
}
现在,当我试图看到我的播放器时。我创建HTTP GET方法以将Player视为JSON。它告诉我&#34; INFINITE&#34; JSON。它告诉我,它让VehicleDetail得到了这个获得此播放器的VehicleDetail的播放器,依此类推。它给了我例外;
java.lang.NoClassDefFoundError: org/codehaus/jackson/map/JsonMappingException$Reference
问题:我需要做什么? FETCHTYPE.LAZY不起作用。
答案 0 :(得分:0)
您应该将@JsonIgnore注释添加到多对多关系中的一方。
@ManyToMany(mappedBy = "players", fetch = FetchType.LAZY)
@org.codehaus.jackson.annotate.JsonIgnore
private List<VehicleDetail> vehicleDetails;
或
@ManyToMany(fetch = FetchType.LAZY)
@org.codehaus.jackson.annotate.JsonIgnore
private List<Player> players;