Запрос частичных объектов с помощью JPA - PullRequest
3 голосов
/ 01 сентября 2009

У меня есть сущность JPA, аналогичная;

public class Inventory {
 private String productname;
 private String manufacturer;
 private Float retailprice;
 private Integer unitssold;
 private String ourcomment;
}

Примерно в 2 из 5 запросов мне нужна вся сущность, но в остальное время я не заинтересован в unitssold и ourcomment .

Это похоже на расточительство, когда вы делаете запрос и получаете большой список результатов, но вам нужна только 3/5 информации. Я хотел бы немного оптимизировать это, и у меня есть догадка, что это можно сделать с помощью наследования.

Но как?

Ответы [ 2 ]

4 голосов
/ 01 сентября 2009

Наследование? Нет.

Даже если предположить, что у вас есть фактическая сущность домена, которая состоит из первых трех полей в вашем списке и Inventory расширила бы ее, любой запрос, который вы сделали бы против этой сущности, неизбежно загрузил бы все поля (через соединение, если сопоставлено в другую таблицу) из-за неявного полиморфизма.

Что вы можете сделать, так это отобразить 4-е и 5-е свойства как "ленивые"; Ваш JPA-провайдер должен будет использовать инструментарий байт-кода, чтобы сделать это:

@Basic(fetch = FetchType.LAZY)
private Integer unitssold;

@Basic(fetch = FetchType.LAZY)
private String ourcomment;

Вам нужно будет указать fetch all properties в запросах, где вам нужно получить все; другие не будут получать значение свойства до первого обращения.

Если честно, такой подход оправдан, только если ваши запросы возвращают большие наборы результатов, а "ленивые" свойства сами по себе довольно велики (например, я бы не стал делать это только для Integer; String может быть осуществимо, если это может стать длинным)

0 голосов
/ 01 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...