Как исправить LazyInitializationException - нет приложения Session in Spring? - PullRequest
0 голосов
/ 27 апреля 2019

В приложении Spring иногда возникает исключение: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role ... could not initialize proxy - no Session на client.getCatIdSet. Я не могу проверить fetch = FetchType.EAGER исправить проблему или нет, потому что эта ошибка возникает не постоянно. Класс имеет Transactional аннотацию, метод публичный. Как я могу исправить это исключение?

@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;
    }

1 Ответ

1 голос
/ 27 апреля 2019

Добавьте в свой 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> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...