2017-03-04 49 views
0

我有以下測試:加入表中沒有被填充在@Transactional測試

@Test 
public void createNewShopAndCheckUserShopsCollection() 
{ 
    //given 
    ShopEntity shop = new ShopEntity(); 
    String shopName = "test shop"; 

    MallEntity mall = new MallEntity(); 
    mall.setId(1L); 

    UserEntity user = userService.findOne(1L); 
    int shopsModeratedBefore = user.getModeratedShops().size(); 

    shop.setMall(mall); 
    shop.setName(shopName); 
    shop.setModerators(Collections.singletonList(user)); 


    ShopEntity savedShop = shopRepository.save(shop); 
    user = userService.findOne(1L); 

    assertThat(user.getModeratedShops()).hasSize(shopsModeratedBefore + 1); 
} 
與@Transactional註解類

。執行後我需要回滾,所以其他測試不會失敗。但是,看起來,連接表沒有在方法結束之前填充(斷言正在下降)。我如何手動確保它得到更新?

這裏是映射UserEntity.java

@ManyToMany(mappedBy = "moderators") 
@JsonBackReference(value = "moderatedShops") 
@Setter 
@Getter 
private List<ShopEntity> moderatedShops; 

在這裏,在ShopEntity.java

@ManyToMany 
@JoinTable(name = "shop_moderators", 
     joinColumns = @JoinColumn(name = "shop_id"), 
     inverseJoinColumns = @JoinColumn(name = "user_id")) 
@JsonManagedReference(value = "moderatedShops") 
@Setter 
@Getter 
private List<UserEntity> moderators; 
+0

拜託,同時顯示你的實體類,另一件事是我不知道這種測試是否有必要。你基本上是測試你是否可以在db中插入一些東西 - 你不測試任何邏輯。不知道你是否也使用了spring-boot,但是如果你仍然想用db來測試存儲數據,可以看一下https://spring.io/blog/2016/04/15/testing-improvements-in-spring- boot-1-4#testing-the-jpa-slice – pezetem

+0

@pezetem我添加了實體。我知道它在實際應用中並沒有多大意義,但是我只是學習使用多對多的關係,在與之相關的jpa存儲庫中添加了一些方法,並且我想確保工作正常。 – KrwawyKefir

回答

0

你這是在您的實現缺乏的是層疊的孩子。只需將@ManyToMany(cascade = CascadeType.ALL)添加到您的保存/刪除應該也適用於子實體。

+0

這不是問題。我想更新連接表,而不是子實體。當我刪除@Transactional註釋它工作正常,但我需要回滾結果,以便其他測試可以運行。 – KrwawyKefir