2009-08-31 3 views
3

У меня есть объект JPA, похожий на;Запросить частичные объекты с 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 информации. Я бы хотел немного оптимизировать это, и у меня есть догадка, что это можно сделать, используя наследование.

Но как?

ответ

4

Наследование? №

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

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

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

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

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

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

0

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

Смежные вопросы