java - 如何修复 LazyInitializationException - Spring 应用程序中没有 session ?

标签 java spring transactions spring-transactions

在Spring应用程序中,有时我会遇到异常:org.hibernate.LazyInitializationException:未能延迟初始化角色集合...无法初始化代理-在client.getCatIdSet<上没有 session /。我无法测试 fetch = FetchType.EAGER 是否修复问题,因为此错误并不经常发生。类有 Transactional 注解,方法是公共(public)的。我该如何解决这个异常?

@Service
@Transactional
public class ChatService {
    @PersistenceContext
    EntityManager entityManager;

    public BotRequest getBotRequest(MessageData messageData) {
        Client client = messageData.getMessage().getClient();
        Optional<CatId> mbCatId = Optional.ofNullable(client.getCatIdSet())
                .orElse(Collections.emptySet())
                .filter
                ...

此方法调用自:

@Service
public class SendMsgToCatBotService extends SendMsgToBotService {
    @Override
    protected BotRequest createBotRequest(MessageData messageData) {
        return chatService.getBotRequest(messageData);
    }

客户端实体:

@Entity
@Table(name = "clients")
public class Client implements Serializable {
    private int id;
    private Set<CatId> catIdSet;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "clients_generation")
    @SequenceGenerator(name = "clients_generation", sequenceName = "clients_id_seq", allocationSize = 1)
    @Column(name = "id")
    public int getId() {
        return id;
    }

    @OneToMany(mappedBy = "client")
    public Set<CatId> getCatIdSet() {
        return catIdSet;
    }

最佳答案

在您的 web.xml 中,添加以下过滤器。

<filter>
  <filter-name>SpringOpenEntityManagerInViewFilter</filter-name>
  <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>SpringOpenEntityManagerInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping> 

关于java - 如何修复 LazyInitializationException - Spring 应用程序中没有 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55882857/

相关文章:

php - MySQL 事务给出错误

java - 跨 Hibernate session 和普通 jdbc 的单个事务

php - SQLite多线程-避免不必要的读者阻塞

java - Eclipse 的 Eclipse 插件开发

java - 无法使用 java(1-1-2100) 从新年日期减去 1 天

java - SpringMvc 磁贴不显示页眉和页脚

spring - 组织.postgresql.util.PSQLException : Large Objects may not be used in auto-commit mode

java - 在表中插入数组列表的各个值

java - JTable 有排序事件吗?

java - 如何在 Springs 的帮助下初始化 EntityManager(不使用 permanent.xml 文件)?