2014-02-15 2 views
0

나는이 두 개체 :
NullPointerException가 내 봄 응용 프로그램에서

@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 ....

내 시험 : org.springframework.orm.hibernate3.support.OpenSessionInViewFilter하지 JUnit 테스트에서 전면 응용 프로그램에서 제대로 작동이 : 게으른 내가 내 web.xml 파일의 필터링 및 공기에서 먼지에 추가 atribute에 액세스

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

.
어떤 점이 오류입니까?

답변

0

세션이 열려있을 때 지연 트랜잭션은 트랜잭션 내에서만 발생합니다. 따라서 미리로드 된 콜렉션을 초기화하지 않는 한 테스트 메소드에서 null을 얻는다.

Another similar question

+0

나는 그래서 난 내 web.xml 파일에 org.springframework.orm.hibernate3.support.OpenSessionInViewFilter을 추가하고 내 테스트 클래스에 @Transactional 주석을 추가 것을 알고있다. 그러나 이것은 도움이되지 않습니다. 내가 잘못? – kuka11

관련 문제