@Loader с @NamedNativeQuery NullPointerException

#java #spring #hibernate #jpa

#java #весна #переход в спящий режим #jpa

Вопрос:

У меня есть 2 класса сущностей:

 @Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String title;

    private String code;
    private long price;

    @OneToMany(mappedBy = "product", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @Loader(namedQuery = "productFields")
    private List<ProductOwnerFields> fields = new ArrayList<>();

    @OneToMany(mappedBy = "product", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private Set<ProductPhoto> photos = new HashSet<>();

    //getters and setters
}

@Entity
@NamedNativeQueries({@NamedNativeQuery(
        name = "productFields",
        resultClass = ProductOwnerFields.class,
        query = "select p.* "  
                "from productownerfields p "  
                "   left outer join templatefields t "  
                "       on p.templateField_id = t.id "  
                "where p.product_id = ? "  
                "order by t.order_field desc"
)})
public class ProductOwnerFields {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "product_id")
    private Product product;

    private String customValue;

    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "templateField_id")
    private TemplateFields templateFields;

    //getters and setters
}
  

и DAO:

 @Repository
public class IProductDao implements ProductDao {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public Product find(int id) {
        return entityManager.find(Product.class, id);
    }
}
  

Когда я пытаюсь получить продукт методом find, я получаю исключение для вызовов полей «поля» класса Product:
не удалось вычислить метод выражения, выдал java.lang.Исключение NullPointerException.

В трассировке выполняется именованный запрос:

ТРАССИРОВКА o.h.type.descriptor.sql.BasicBinder — параметр привязки [1] как [ЦЕЛОЕ ЧИСЛО] — [88] ОТЛАДКА org.hibernate.loader.Загрузчик — строка результирующего набора: 0 ТРАССИРОВКА o.h.t.descriptor.sql.BasicExtractor — извлеченное значение ([id] : [ЦЕЛОЕ ЧИСЛО]) — [361] ОТЛАДКА org.hibernate.loader.Загрузчик — строка результата: EntityKey[com.inetshop.core.entities.ProductOwnerFields#361]

Как я могу исправить это неправильно? Набор загрузки ProductPhoto в порядке.

Спасибо за вашу помощь!

Комментарии:

1. можете ли вы вместо этого попробовать выборку с левым соединением?

2. спящий режим выполняет подобный запрос, я имею в виду с левым внешним соединением