[英]LazyInitializationException after return updated entity
I have some model with two relations:我有一些 model 有两个关系:
@Entity
@Table(name = "data_model")
public class DataModel {
@Id
@GeneratedValue
@Column(name = "model_id")
private Integer id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "dataModel", cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE})
private List<OutputField> outputFields;
@OneToMany(mappedBy = "dataModel", cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE})
private List<Query> queries;
//some another fields
}
I use Spring Data JPA
and I want to update entity.我使用
Spring Data JPA
并且我想更新实体。 I write simple service:我写简单的服务:
@Service
public class DataModelService {
@Autowired
private DataModelRepository dataModelRepository;
@Transactional
public DataModel createOrUpdate(DataModel dataModel) {
return dataModelRepository.save(dataModel);
}
//another methods
}
I write simple test:我写了简单的测试:
public class DataModelServiceTest {
@Autowired
private DataModelService dataModelService;
@Test
void shouldUpdateDataModel() {
DataModel dataModelBeforeUpdate = dataModelService.getById(1);
dataModelBeforeUpdate.getQueries().get(0).setSqlQuery("SELECT 1");
DataModel updatedModel = dataModelService.createOrUpdate(dataModelBeforeUpdate);
assertThat(updatedModel.getQueries(), notNullValue());
}
}
But, I get error, when I try to call method getQieries()
:但是,当我尝试调用方法
getQieries()
时出现错误:
Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.
Questions:问题:
outputFields
field filled in correctly, but the queries
field is not?outputFields
字段填写正确,而queries
字段填写不正确? It happens because you are trying to initialize collection outside a transaction.发生这种情况是因为您试图在事务之外初始化集合。 To fix this add
@DataJpaTest
and @RunWith(SpringRunner.class)
annotations to your test class.要解决此问题,请将
@DataJpaTest
和@RunWith(SpringRunner.class)
注释添加到您的测试 class。 By default, data JPA tests are transactional.默认情况下,数据 JPA 测试是事务性的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.