簡體   English   中英

事務內部的Spring Boot LazyInitializationException

[英]Spring Boot LazyInitializationException inside Transaction

我在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.initialize(AbstractLazyInitializer.java:169)上沒有會話org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor.intercept(ByteBuddyInterceptor.java:45)的.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:309)在org.hibernate.proxy.ProxyConfiguration $ InterceptorDispatcher。 .java:95),位於com.sportradar.promt.domain.promt.Environment $ HibernateProxy $ ZNab0Ju2.getName(未知源),位於sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法),位於sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl。 java:62)位於sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位於java.lang.reflect.Method.invoke(Method.java:498)在com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField (BeanProp 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

好的,我找到了解決方案,將Environment.class注入了DTO,這根本不起作用。 我只是忘了將Environment.class映射到EnvironmentResponse.class

暫無
暫無

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

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