2017-03-04 44 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