[英]LazyInitializationException after return updated entity
我有一些 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
}
我使用Spring Data JPA
並且我想更新實體。 我寫簡單的服務:
@Service
public class DataModelService {
@Autowired
private DataModelRepository dataModelRepository;
@Transactional
public DataModel createOrUpdate(DataModel dataModel) {
return dataModelRepository.save(dataModel);
}
//another methods
}
我寫了簡單的測試:
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());
}
}
但是,當我嘗試調用方法getQieries()
時出現錯誤:
Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.
問題:
outputFields
字段填寫正確,而queries
字段填寫不正確? 發生這種情況是因為您試圖在事務之外初始化集合。 要解決此問題,請將@DataJpaTest
和@RunWith(SpringRunner.class)
注釋添加到您的測試 class。 默認情況下,數據 JPA 測試是事務性的。
有關詳細信息,請參閱此處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.