2015-03-02 107 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但他们并不像我认为这个简单的解决方案那样干净。