2014-02-15 54 views
0

在我的春天應用我有兩個實體:
NullPointerException異常時要訪問JUnit測試延遲加載的集合

@Entity 
public class Category { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 
     .... 
    @OneToOne 
    @Cascade({CascadeType.ALL}) 
    @JoinColumn(name="page_id") 
    private Page page; 

    @OneToMany(fetch=FetchType.LAZY, mappedBy="category") 
    private List<Shop> shop; 

     ..getters and setters 
} 

而且

@Entity 
    public class Shop { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 
     .... 

    @OneToOne(mappedBy="shop") 
    private Settings settings; 


    @ManyToOne 
    @Cascade({CascadeType.SAVE_UPDATE}) 
    @JoinColumn(name = "category_id") 
    private Category category; 

    @OneToOne 
    @Cascade({CascadeType.ALL}) 
    @JoinColumn(name = "page_id") 
    private Page page; 
     ...getters and setters 

}

在我測試的JUnit我添加一些類別和一些商店這個類別,當我想訪問商店列表當前類別我有一個錯誤 java.lang.NullPointerException ....

我的測試:

@ContextConfiguration(locations = { 
    "classpath:security-context.xml", 
    "classpath:dao-context.xml" 
}) 
@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=false) 
@Transactional 
public class CategoryTest { 

Shop shop1 = new Shop(....); 
Shop shop1 = new Shop(....); 
Category category1 = new Category(....); 
Category category2 = new Category(....); 

@Test 
public void someTest(){ 
    shop1.setCategory(category1); 
    shop2.setCategory(category2); 
    shopService.add(shop1); 
    shopService.add(shop2); 
    assertEquals(2, shopService.getAllShop().size()); 
    assertEquals(2, categoryService.getAllShop().size()); 
     //IN THIS LINE I HAVE A ERROR 
    assertEquals(1, categoryService.getCategory(category1.getId()).getShop().size()); 
    } 
} 

要訪問懶屬性附加傷害我加入到我的web.xml FILTR:org.springframework.orm.hibernate3.support.OpenSessionInViewFilter這不是在JUnit測試在前面的應用程序工作正常。
哪一點我犯了一個錯誤?

回答

0

延遲加載只發生在事務內部,當會話打開時。因此,除非您事先初始化延遲加載的集合,否則您在測試方法中會得到空值。

Another similar question

+0

我知道,所以我說org.springframework.orm.hibernate3.support.OpenSessionInViewFilter我的web.xml並添加@Transactional註解到我的測試類。但是這沒有幫助。我錯了嗎? – kuka11