#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. спящий режим выполняет подобный запрос, я имею в виду с левым внешним соединением