JPA и NullPointerException при доступе к связанной сущности, но случайным образом

Я использую Wildfly16 + Eclipselink2.6.0 и проект EAR. База данных - Postgresql. Есть несколько сущностей:

  • Группа: группа для магазинов
  • Магазин: магазин с отношениями n:1 с Группой.
  • НДС: Информация о НДС, n:1 с Группой.

Это сущности (отрывок):

@Entity
@Cacheable(value = false)
public class ShoppingCart {
    ...
    @JoinColumn(name = "idpv",referencedColumnName = "ID",nullable = false)
    @ManyToOne(fetch = FetchType.EAGER)
    @JsonSerialize(using = StandardJsonSerializer.class)
    private Shop shop;
    ...
}


@Entity
public class Shop implements Serializable {
    @ManyToOne(targetEntity = Group.class, fetch = FetchType.EAGER )
    @JoinColumn(name = "idgroup", referencedColumnName = "ID", nullable = false)
    private Group group;
}

@Entity
@Cacheable(false)
public class Group implements Serializable {
    ...
}

@Entity
public class VAT implements Serializable {

   @ManyToOne(fetch = FetchType.EAGER)
   @JoinColumn(name = "idgroup",referencedColumnName = "ID")
   private Group group;
}

Это код:

@PersistenceContext(unitName = "MyPU")
private EntityManager em;

...

public void createInvoice(Long idcart){

ShoppingCart c = this.entitymanager.find(ShoppingCart.class, idcart);
if(c == null){
     throw new BssException("Cart not found");
}

Shop shop = c.getShop();
if(shop != null){
    LOG.log(Level.INFO, "Invoice for shop {0}", new Object[]{shop.getCode()});
    RowInvoice rowTrasp = new RowInvoice();
        ...
        
    List<VAT> lVat = this.em.createNamedQuery("VAT.findVATGroup", VAT.class)
                .setParameter("idgroup", shop.getGroup().getId()) // <- row 265
                .setParameter("vat", 22.00)
                .getResultList();
    ...
}
}

И это запросы JPQL.

SELECT i FROM VAT i
WHERE i.group.id = :idgroup AND i.value = :vat

Итак: я хочу получить информацию о НДС от группы с процентным значением 22,00%. Я использую эту функцию при выставлении счетов.

Я могу выставлять много счетов, но, начиная с случайного момента, я больше не могу выставлять счета. Если я перезапущу Wildfly без изменения каких-либо данных в базе данных, счета-фактуры начнут работать.

Трассировка стека исключения:

Caused by: java.lang.NullPointerException
    at com.bsssrl.bssspesaweb_ejb.GeneratoreFatture.creaTestataDocumentoStd(GeneratoreFatture.java:265)
    at sun.reflect.GeneratedMethodAccessor790.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

Я не меняю группу, магазин или чан, это статическая информация (не обновляется с 2018 года). Каждый день я выставляю много тележек и счетов с этими данными.

Почему одни и те же записи с одним и тем же методом выдают эту ошибку и после перезапуска работает? Я полагаю, это может быть проблема с кешем. Как я могу это проверить?

Это не проблема подключения к базе данных, потому что другие операции работают нормально. Эти же данные используются для создания корзины покупок. Все остальные запросы работают.

0 ответов

Другие вопросы по тегам