2013-02-01 29 views
0

我想設置一個菜單下拉的孩子。我爲菜單項創建了一個常規表,並且爲每個子項移動了一個set/array/list(每個嘗試),以使它更容易通過JSP呈現。但是,當我嘗試使用.add()將項添加到子項列表中時,我收到一個java.lang.NullPointerException,並且不再繼續。使用Hibernate的瞬態設置拋出空異常

我的系統是使用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

'私人設置

pageChildren =新的HashSet ();'? – sp00m

+0

我試過了:它在for(Menu item:menuItems)行上產生一個java.util.ConcurrentModificationException異常行 – Toby

+0

ok試試列表

menuItems = menuService.getAll();如果你'getall()'返回一個Menu類型的'LIST' – DarkHorse

回答

0

瞬時可變的,而對於循環被配置錯。從控制器

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

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

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

    ... 

和必要的片段::

模型(不包括不相關的字段和getter/setter方法)

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); 
    } 
}