2013-08-09 1 views
0

я есть таблица отображенный к этому классу:JPA выбора, каким должен быть ленивым загружен, когда нет необходимости

@Entity(name = "status_history") 
    @Table 
    public class StatusChange implements Comparable<StatusChange> { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 
    @Column(name = "when_") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date when; 
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinColumn(name = "ordering_id") 
    private Ordering ordering; 
    private Short status; 
    ... 



@Override 
public int hashCode() { 
    return id.intValue(); 
} 

@Override 
public boolean equals(Object o) { 
    if (o instanceof StatusChange) { 
     StatusChange sc = (StatusChange) o; 
     if (id == null) { 
      return false; 
     } 
     return id.equals(sc.getId()); 
    } 
    return false; 
} 
    ... 

, который имеет 5006 строк. Почему лесозаготовительных показывает, что, когда я выполнить этот запрос:

Query query = em.createQuery("SELECT DISTINCT sh FROM status_history sh"); 
return query.getResultList(); 

лесозаготовительной показывает JPA является выборка также realted классы:

[EL Fine]: sql: 2013-08-09 17:02:52.631--ServerSession(27039955)--Connection(12972016)--Thread(Thread[main,5,main])--SELECT ID, TYPE, anniversary_newspapers, anniversary_newspapers_type, AUTHOR, copy_color, copy_format, decorated_folder, decorated_folder_note, delivery_type, publishing_description, SIGNATURE, TITLE, USAGE, work_amount, work_amount_desc, work_type, year_, BARCODE, comment_, denial_reason, EXHIBITION, exhibition_name, further_processing, LZA, no_new_scans, ONLINE, RESTORATION, SMALL, URGENT FROM ordered_object WHERE (ID = ?) 
    bind => [54] 
[EL Fine]: sql: 2013-08-09 17:02:52.632--ServerSession(27039955)--Connection(12972016)--Thread(Thread[main,5,main])--SELECT ID, TYPE, cancel_comment, claim_comment, COMMUNICATION, EDITOR, internal_id, LOCATION, STATUS, YEAR, yearly_number, billing_contact_id, oo_id, orderer_id, accumulated, customer_created, estimated_price, no_barcode, no_object, accumulated_id FROM ORDERING WHERE (oo_id = ?) 
    bind => [54] 
[EL Fine]: sql: 2013-08-09 17:02:52.634--ServerSession(27039955)--Connection(12972016)--Thread(Thread[main,5,main])--SELECT ID, _comment, control_finished, CONTROLLER, date_of_entry, empty_pages, scan_finished, scan_method1, scan_method2, scan_operator, SCANNER, SENDER, thumbnail_number, total_pages, oo_id FROM SCAN_INFO WHERE (oo_id = ?) 
    bind => [54] 
[EL Fine]: sql: 2013-08-09 17:02:52.635--ServerSession(27039955)--Connection(12972016)--Thread(Thread[main,5,main])--SELECT ID, onb_employee, contact_id FROM ORDERER WHERE (ID = ?) 
    bind => [54] 

и запрос занимает 30сек. Что мне здесь не хватает? благодарит заблаговременно!

ответ

0

EclipseLink требует ткачества быть включен, чтобы лениво, чтобы использовать на OneToOne и ManyToOne отношениях, в противном случае это всего лишь намек на документе http://www.eclipse.org/eclipselink/documentation/2.4/concepts/app_dev007.htm содержит информацию о ткачестве с EclipseLink и ссылками о том, как установить его, если он не является используемый.
Это автоматическое приложение на серверах приложений, совместимых с JPA, и поэтому их обычно пропускают в демонстрациях и учебниках.

Вы также можете использовать соединение или пакетное чтение, чтобы ускорить поиск ссылок, но может не понадобиться с плетением и ленивыми отношениями. http://wiki.eclipse.org/EclipseLink/Examples/JPA/QueryOptimization

+0

Да, я понял это тем временем. извините, за беспокойство и благодарность за ответ! – george