0
我使用springBootTest来测试我创建的服务。在每个函数之前,我直接使用仓库创建一个parententity。SpringBootTest没有解决父子关系 - 未能延迟初始化
parentEntity = parentEntityRepository.saveAndFlush(ObjectMother.getParentEntityBuilder().string3("s3").build());
在我的测试中,我创建一个childentity
childEntity = childEntityRepository.saveAndFlush(ObjectMother.getChildEntityBuilder().parentEntity(parentEntity).build());
孩子们的关系定义如下
@Getter @Setter
@OneToMany(orphanRemoval = true)
@JoinColumn(name="PARENTENTITY_ID", updatable = false)
private Set<ChildEntity> children;
这是测试
parentEntity = parentEntityService.read(requestContext, parentEntity.getId());
parentEntity.getChildren().forEach(child -> Assert.assertNotNull(child.getText()));
它会导致内调用以下错误
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.sap.icn.pi.test.data.mcp.ParentEntity.children, could not initialize proxy - no Session
如果我添加@Transactional到我的测试方法我收到以下
java.lang.NullPointerException // for parentEntity.getChildren()
**编辑:代码片段**
@Test
public void get_children_through_parent() {
parentEntity = parentEntityService.read(requestContext, 1);
parentEntity.getChildren().forEach(child -> Assert.assertNotNull(child));
parentEntity.getChildren().forEach(child -> Assert.assertNull(child.getTooltip()));
}
ParentEntity类
@Entity
@Table(name = "T_PARENTENTITY")
@SequenceGenerator(initialValue = 1, name = "idgen", sequenceName = "SEQ_PARENTENTITY")
@Builder @NoArgsConstructor @AllArgsConstructor
@Localized
public class ParentEntity extends BaseEntity{
... //props
@Getter @Setter
@OneToMany(orphanRemoval = true)
@JoinColumn(name="PARENTENTITY_ID", updatable = false)
private Set<ChildEntity> children;
}
感谢您的解释。建议2似乎并不合适,因为我不想将我的抓取类型更改为只是为了能够更好地进行测试。 我将如何确保在同一会话中读取对象。我基本上只是使用我的服务层功能。 –
您是否正在通过各种用户请求分享它们? – luboskrnac
分享什么?在测试中,我称之为“e = myservice.read(...)”,之后是“e.getChildren()”,基本上就是这样。我试图添加@Transactional到测试类,这将解决错误,但getChildren将始终返回空值,然后... –