当前位置: 首页 > 知识库问答 >
问题:

Spring Boot LazyInitializationException在事务中

越高峻
2023-03-14

我在Spring Boot中有一个服务层类。这个类允许获取我的模型。我正在将所有模型对象转换为响应对象(DTO)。问题是我在事务中得到了一个LazyLoadException。在我看来,这不应该发生,因为数据库连接仍然是打开的。还是这样做错了?提前感谢!

@Cacheable
@Transactional(propagation = Propagation.REQUIRED)
public List<DatabaseServerResponse> getDatabaseServers(Pageable pageable){
    System.err.println(TransactionSynchronizationManager.isActualTransactionActive());
    List<DatabaseServerResponse> databaseServerResponses= databaseServerRepository
            .findAll(pageable)
            .get()
            .map(databaseServer -> databaseServerConverter.convertToDatabaseServerResponse(databaseServer))
            .collect(Collectors.toList());
    System.err.println(TransactionSynchronizationManager.isActualTransactionActive());
    return databaseServerResponses;
}

原因:org.hibernate.lazyInitializationException:无法初始化代理[com.sportradar.promt.domain.promt.environment#1]-在org.hibernate.proxy.abstractlazyInitializer.initializer.initializer(abstractlazyInitializer.java:169)在org.hibernate.proxy.abstractlazyInitializer.getimplementation(abstractlazyInitializer.java:309)在在com.sportradar.promt.domain.promt.environment$hibernateProxy$znab0ju2.getname(未知源)在sun.reflect.nativeMethodAccessorImpl.invoke0(原生方法)在sun.reflect.nativeMethodAccessorImpl.invoke(原生方法)在sun.reflect.nativeMethodAccessorImpl.invoke(原生方法)在sun.reflect.nativeMethodAccessorImpl.java:62)在ertyWriter.java:688)在com.fasterxml.jackson.databind.ser.std.beanSerializerBase.SerializeFields(BeanSerializerBase.java:719)...109个常见帧被省略

@Entity
@Table(name = "databaseservers")
@Getter
@Setter
public class DatabaseServer {

@Id
private Integer id;

@Column(name = "name")
private String name;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "environment_id", referencedColumnName = "id", columnDefinition = "TINYINT(3)")
private Environment environment;

@Column(name = "host")
private String host;

@Column(name = "dbuser")
private String dbUser;

@Column(name = "dbpasswd")
private String dbPassword;

}

已禁用视图中打开设置。

  jpa:
    open-in-view: false

共有1个答案

欧阳勇军
2023-03-14

好的,我找到了解决方案,Environment.class被注入到DTO中,这根本不起作用。我只是忘了将Environment.class映射到EnvironmentResponse.class

 类似资料:
  • 问题内容: 我需要从存储过程中写入日志表。现在,此日志信息必须能够在回滚过程中幸免。 我知道以前曾问过这个问题,但是我的情况有所不同,在这些问题中找不到我的问题的答案。 当存储过程中没有错误时,事情就很简单了,日志表中的条目就在那里。 当有错误时,事情就变得复杂了。 在该过程中,我可以在catch中进行回滚,然后将数据插入日志表,我知道并且我已经在这样做了。 但是问题是当存储过程这样调用时: 我知

  • 问题内容: 当服务中抛出RuntimeException时,我使用Grail的回滚功能将所有服务更新为事务性。在大多数情况下,我都这样做: 无论如何,我想验证这是否确实会回滚事务……这让我开始思考是否在这一点上已经提交了。此外,如果没有,设置flush:true会改变这一点吗?我对Spring / Hibernate如何完成所有这些工作不是很熟悉:) 问题答案: 是的,那样做。 默认情况下,Gra

  • 我将HiberNate与Panache一起使用,并且需要在应用程序启动时添加用户。为此,我使用注释我的bean,然后我有一个带有注释的方法。 目前,我正在使用以下代码: 据我发现,当调用此方法时,不能保证所有内容都已经设置好,我想这就是为什么它有时会失败并出现错误的原因。我已经检查过这个问题,但由于它是针对 Spring 的,因此该方法不起作用,我没有找到任何类似的东西 Quarkus。 我是否缺

  • 我正在将代码从EJB迁移到Spring-Hibernate。如果发生故障,如何加入事务并回滚?下面是EJB中的代码: 更新1:我们如何连接发生在不同数据库上的两个事务?有2个事务需要原子地执行。如果第二个事务失败,则必须回滚第一个事务。对此如何落实?

  • 我正在尝试创建一个事务方法,该方法调用其他几个事务方法以保存一些相互依赖的db实体。如果任何调用失败,我希望事务完全回滚。但是,这不是观察到的行为。这是我的代码: 也有and,但是当事务在第二次调用时失败时,第一个被提交。

  • 如果我有一个在类级别上标记为的基本Dao类,这将导致Dao的每个调用都在它自己的事务中运行。 如果我在某个地方创建了一个方法,它使用多个对不同道方法的调用,会怎么样?这些调用中的每一个都将在自己的事务中运行,还是事务将被包装? 如果它被包装,你会认为这是一个很好的做法,在一个通用的DAO类中有<代码> @事务性< /代码>注释,以便DAO可以直接用作<代码> @ AutoWordBaseDaO。