2015-03-02 112 views
0

我有一個6列的表,其中一個是一個CLOB列,在搜索這個表時,我不想把這個列數據,但當用戶請求細節然後生病加載它,我怎麼實現與Spring Data JPA,我嘗試使用投影+ MetaModel對象沒有幫助Spring Data + JPA如何避免加載列

+1

嘗試使用'@Basic(fetch = FetchType.LAZY)註釋該字段' – 2015-03-02 14:53:17

+0

我有它但我在Web層從Entity Object轉換爲Resource對象,那麼我該如何避免它 – gnanesh 2015-03-02 15:02:43

+1

不要調用getter對於該字段,因爲這樣做會觸發查詢來獲取CLOB數據。另外,請注意,這可能不起作用,不同的JPA實現以不同的方式處理這個問題。 – 2015-03-02 15:07:50

回答

0

我通過將兩列移動到一個單獨的表中做到了這一點。之前:

@Entity 
public class Heavy implements Serializable { 
    // other properties 
    private byte[] image; 
    private byte[] thumb; 
} 

後:

@Entity 
public class Light implements Serializable { 
    // other properties 

    @OneToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "fk_image_id") 
    private RawImage image; 

    @OneToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "fk_thumb_id") 
    private RawImage thumb; 
} 

這意味着默認不加載的圖像/數據大拇指,我只是增加了一個,當我需要他們像下面這樣獲取:

String jpql = "select l from Light l join fetch h.image i"; 

other techniques described in this answer但他們並不像我認爲這個簡單的解決方案那樣乾淨。