我在测试是否在Spring DataJpaTest中加载了一个集合时遇到了麻烦。
为此,我创建了一个具有id和项目列表的实体,如下所示。该列表应该是延迟加载的(因此我假设它不应该在测试中加载)。
@Data
@Entity
@Table(name = "examples")
public class Example {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
@OneToMany(mappedBy = "example", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<ExampleElement> collection;
}
存储库代码如下所示:
@Repository
public interface ExampleRepository extends PagingAndSortingRepository<Example, Long> {
@Query("SELECT e FROM Example e")
List<Example> findAllActive();
}
在测试中,我正在创建一个新的Example实体,生成集合,将实体保存到数据库,然后从数据库中获取实体并检查集合是否已初始化。 测试代码如下所示:
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
public class ExampleRepositoryTest {
@Autowired
private ExampleRepository repository;
@Test
public void myTest() {
Example example = new Example();
example.setCollection(Utils.generateCollection()))
repository.save(example);
List<Example> actives = repository.findAllActive();
// tests in a loop whether the collection is initialized which should return false
}
我尝试了以下内容:
em.getEntityManager().getEntityManagerFactory().getPersistenceUnitUtil()
注入TestEntityManager并从那里获取PersistenceUnitUtil并调用isLoaded(actives.get(0).getCollection())
和isLoaded(actives.get(0), "collection")
方法 - 都返回true Hibernate.isInitialized(actives.get(0).getCollection())
和Hibernate.isPropertyInitialized(actives.get(0), "collection")
方法,两者都返回true。我错过了什么?