В приложении 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;
}