簡體   English   中英

返回更新實體后的 LazyInitializationException

[英]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.

在調試中我看到: 在此處輸入圖像描述

問題:

  1. 為什么會發生此錯誤,我該如何解決? 如何讓 hibernate 在更新后返回所有鏈接?
  2. 為什么outputFields字段填寫正確,而queries字段填寫不正確?

發生這種情況是因為您試圖在事務之外初始化集合。 要解決此問題,請將@DataJpaTest@RunWith(SpringRunner.class)注釋添加到您的測試 class。 默認情況下,數據 JPA 測試是事務性的。

有關詳細信息,請參閱此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM