2014-11-04 13 views
0

我有两个实体“可结算”和项目。两者之间都有双向oneToMany映射。 当我试图添加一组项目来计费。它显示“java.lang.NullPointerException”Spring MVC,java.lang.NullPointerException同时在一组实体中添加一个项目

我该如何添加一组项目才能正常结算。 我正在尝试将项目添加到这样的收费项目中。另一个实体用户也有一组项目。

 Set<Item> s = (Set)user.getItem(); 
    for(Item i:s){ 
     Set<Item> items = new HashSet<Item>(); 

     System.out.println(i.getItemName()); 
     Item myItem = (Item)i; 

     bill.getItem().add(myItem); 
    } 

这里是我的控制器

 @RequestMapping(value="/checkOut",method = RequestMethod.POST) 
    public String checkOut(@RequestParam("id")String userName){ 

    billable bill = new billable(); 
    bill.setBillableName(rName); 
    bill.setBillableAddress(bAddress); 

    User user = userService.getuserByName(userName); 

    bill.setUser(user); 

    Set<Item> s = (Set)user.getItem(); 

    for(Item i:s){ 
     Set<Item> items = new HashSet<Item>(); 

     System.out.println(i.getItemName()); 
     Item myItem = (Item)i; 

     bill.getItem().add(myItem); 
    } 

回答

0

我怀疑您的计费对象有像场: 私人设置项;

有两个选项:

选项1,在你的计费对象,在为getItem()方法中,添加一个空检查:

public Set<Item> getItem() { 
    if (item == null) { 
     item = new HashSet<>(); 
    } 
    return item; 
} 

这是一个相当普遍的做法。

选择二,改变你的控制器,你设定的项目,而不是项目:

@RequestMapping(value="/checkOut",method = RequestMethod.POST) 
public String checkOut(@RequestParam("id")String userName){ 

billable bill = new billable(); 
bill.setBillableName(rName); 
bill.setBillableAddress(bAddress); 

User user = userService.getuserByName(userName); 

bill.setUser(user); 

Set<Item> s = (Set)user.getItem(); 

Set<Item> items = new HashSet<Item>(); 
for(Item i:s){ 

    System.out.println(i.getItemName()); 
    Item myItem = (Item)i; 
    //I'm assuming your gonna actually do something here, not just loop for fun 
    items.add(i); 
} 
bill.setItem(items); 
相关问题