Hibernate 推土机抛出lazyInitializationException异常

Hibernate 推土机抛出lazyInitializationException异常,hibernate,dozer,lazy-initialization,Hibernate,Dozer,Lazy Initialization,我想把我的POJO映射到DTO。我没有任何自定义字段映射器,因为DTO中的所有字段都与POJO中的字段相同。但我的POJO涉及多个层次的映射。我的问题是,当我试图将POJO的内容复制到DTO时,我遇到了LazyInitializationException。下面是引发异常的代码 public TestInfoDTO startTest(long testId) { TestInfo info = testDAO.startTest(testId); Mapper mapper

我想把我的POJO映射到DTO。我没有任何自定义字段映射器,因为DTO中的所有字段都与POJO中的字段相同。但我的POJO涉及多个层次的映射。我的问题是,当我试图将POJO的内容复制到DTO时,我遇到了LazyInitializationException。下面是引发异常的代码

public TestInfoDTO startTest(long testId)
{
    TestInfo info = testDAO.startTest(testId);

    Mapper mapper = new DozerBeanMapper();
    try
    {
        // Exception thrown here.
        infoDTO = mapper.map(info, TestInfoDTO.class);

    } catch(Exception e) {
        LOGGER.info("Exception Thrown While Mapping POJO to DTO");
        e.printStackTrace();
    }
    return infoDTO;
}
这是我的POJO

@Entity
@Table(name = "TEST_INFO")
public class TestInfo implements Serializable,IAuditLog
{
private static final long serialVersionUID = 1L;

private long test_ID;
private String test_name;
private Date creation_date;
private String instructions;
private TestPaperInfo testPaperInfo;
private List<TestResults> testResults;
private List<TestResponse> testResponses;
private List<TestUtility> testUtility;

//Getters and setters with hibernate annotations.
}
@实体
@表(name=“测试信息”)
公共类TestInfo实现了可序列化的IAuditLog
{
私有静态最终长serialVersionUID=1L;
私人长测试ID;
私有字符串测试名称;
私人日期创建日期;
私有字符串指令;
私人TestPaperInfo TestPaperInfo;
私有列表测试结果;
私有列表测试响应;
私有列表测试工具;
//带有hibernate注释的getter和setter。
}
这是我的DTO

public class TestInfoDTO 
{
private long test_ID;
private String test_name;
private Date creation_date;
private String instructions;
private TestPaperInfo testPaperInfo;
private List<TestResults> testResults;
private List<TestResponse> testResponses;
private List<TestUtility> testUtility;

//Getters and Setters.
}
public类TestInfoDTO
{
私人长测试ID;
私有字符串测试名称;
私人日期创建日期;
私有字符串指令;
私人TestPaperInfo TestPaperInfo;
私有列表测试结果;
私有列表测试响应;
私有列表测试工具;
//能手和二传手。
}
在上面的POJO中,TestPaperInfo有另一个类的集合,该类又有一个问题集合,每个问题都有一个答案集合。它们都使用JPA注释进行映射

我已经检查了从DAO获得的“info”对象的内容,所有内容都存在。但当我试图将其复制到DTO(“infoDTO”对象)时,会抛出LazyInitializationException。
这是我第一次使用DTO和推土机,所以有人能建议我是否遗漏了什么吗?或者问题是什么?提前谢谢。

我想testDAO是@Transactionnal。这意味着一旦testDAO.startTest完成,事务将关闭


除非交易是提前开始的。在主startTest函数上放置@Transactionnal注释。这样,当dozer映射到DTO并访问代理模型TestInfo时,事务仍将打开。

我猜testDAO是@Transactionnal。这意味着一旦testDAO.startTest完成,事务将关闭

除非交易是提前开始的。在主startTest函数上放置@Transactionnal注释。这样,当dozer映射到DTO并可以访问代理模型TestInfo时,事务仍将打开