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 года). Каждый день я выставляю много тележек и счетов с этими данными.
Почему одни и те же записи с одним и тем же методом выдают эту ошибку и после перезапуска работает? Я полагаю, это может быть проблема с кешем. Как я могу это проверить?
Это не проблема подключения к базе данных, потому что другие операции работают нормально. Эти же данные используются для создания корзины покупок. Все остальные запросы работают.