kiky的gravatar头像
kiky 2014-12-02 16:16:48

hibernate注解懒加载如何实现?

表A  id   name  tid

表B  tid  name  file(Blob)

通过一对多的关系,表A和表B关联,表B是懒加载的可以实现,懒加载的时候,如何让file,blob类型的字段也懒加载? 根据name去判断,判断需要再去加载file 这个Blob这个字段。

这个需求可以实现么?hibernate是否支持?

所有回答列表(3)
maochong2009的gravatar头像
maochong2009  LV8 2014年12月3日

只要你不getB对象  就不会加载的

评论(1) 最佳答案
kiky的gravatar头像
kiky  LV10 2014年12月3日

自己找到了方法

import org.hibernate.bytecode.internal.javassist.FieldHandled;
import org.hibernate.bytecode.internal.javassist.FieldHandler;

@Entity
@Table(name = "TUSERLOG" )
public class Tuserlog implements java.io.Serializable,FieldHandled   {

    // Fields

    /**
     *
     */
    private static final long serialVersionUID = 2982596840484704775L;
    private String userLogId;
    private String name;
    private String text;
    private String url;
    private String formContent;
    private String userIp;
    private Date updateTime;

    // Constructors

    /** default constructor */
    public Tuserlog() {
    }

    /** minimal constructor */
    public Tuserlog(String userLogId, String name, String text, String url, String userIp, Date updateTime){
        super();
        this.userLogId = userLogId;
        this.name = name;
        this.text = text;
        this.url = url;
        this.userIp = userIp;
        this.updateTime = updateTime;
    }

    /** full constructor */
    public Tuserlog(String userLogId, String name, String text, String url,
            String formContent, String userIp, Date updateTime) {
        this.userLogId = userLogId;
        this.name = name;
        this.text = text;
        this.url = url;
        this.formContent = formContent;
        this.userIp = userIp;
        this.updateTime = updateTime;
    }

    // Property accessors
    @Id
    @Column(name = "USER_LOG_ID", unique = true, nullable = false, length = 36)
    public String getUserLogId() {
        return this.userLogId;
    }

    public void setUserLogId(String userLogId) {
        this.userLogId = userLogId;
    }

    @Column(name = "NAME", nullable = false, length = 30)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name = "TEXT", nullable = false, length = 100)
    public String getText() {
        return this.text;
    }

    public void setText(String text) {
        this.text = text;
    }

    @Column(name = "URL", nullable = false, length = 200)
    public String getUrl() {
        return this.url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

//    @Column(name = "FORM_CONTENT", columnDefinition="longtext") //mysql
    @Basic(fetch=FetchType.LAZY)
    @Column(name = "FORM_CONTENT", columnDefinition="CLOB")     //oracle
    public String getFormContent() {
        if (fieldHandler != null) {  
           return (String) (fieldHandler.readObject(this, "formContent", formContent));  
        }  
        return null;
 

        //return this.formContent;
    }

    public void setFormContent(String formContent) {
        this.formContent = formContent;
    }

    @Column(name = "USER_IP", length = 15)
    public String getUserIp() {
        return this.userIp;
    }

    public void setUserIp(String userIp) {
        this.userIp = userIp;
    }
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "UPDATE_TIME", nullable = false, length = 7)
    public Date getUpdateTime() {
        return this.updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    
    private FieldHandler fieldHandler;
    @Override
    public FieldHandler getFieldHandler()
    {
        return fieldHandler;  
    }

    @Override
    public void setFieldHandler(FieldHandler fieldHandler)
    {
        this.fieldHandler = fieldHandler;  
    }

}

xyhwork的gravatar头像
xyhwork  LV2 2015年2月5日

延迟加载注解:
    @Basic(fetch = FetchType.LAZY)
   

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友