使用Hibernate Transient Set会抛出null异常

时间:2013-02-01 10:16:43

标签: java hibernate set

我正在尝试设置一个带有下拉菜单的菜单。我已经创建了一个用于菜单项的常规表,以及一个set / array / list(尝试过每个),子项将被移动到其中,以便通过JSP更容易呈现。但是,当我尝试使用.add()将项添加到子列表中时,我收到一个java.lang.NullPointerException,它不再进一步。

我的系统是使用Spring / Hibernate设置的,除此之外一切正常。

模型(不包括不相关的字段和getter / setter):

public class Menu {
  @Transient
  private Set<Menu> pageChildren;

  @Column(name = "pageParent")
  private Integer pageParent;

  @Column(name = "pageId")
  private Integer pageId;

  ...

来自控制器的必要片段:

List<Menu> menuItems = new ArrayList<Menu>();
menuItems = menuService.getAll();
for (Menu item: menuItems) {
  if (item.getPageType() == 1 && item.getPageParent() > 0) {
    menuItems.get(item.getPageParent() - 1).getPageChildren().add(item);
    menuItems.remove(item);
  }
}

1 个答案:

答案 0 :(得分:0)

瞬态变量需要初始化,并且for循环配置错误。

模型(不包括不相关的字段和getter / setter):

public class Menu {
  @Transient
  private Set<Menu> pageChildren = new HashSet<Menu>();       //CHANGED

  @Column(name = "pageParent")
  private Integer pageParent;

  @Column(name = "pageId")
  private Integer pageId;

  ...

来自控制器的必要片段:

List<Menu> menuItems = new ArrayList<Menu>();
menuItems = menuService.getAll();
for(int i=0; i<menuItems.size(); i++){                        //CHANGED
  Menu item = menuItems.get(i);                               //CHANGED
  if (item.getPageType() == 1 && item.getPageParent() > 0) {
    menuItems.get(item.getPageParent() - 1).getPageChildren().add(item);
    menuItems.remove(item);
  }
}