Hibernate 5 & JPA 2.1 延迟加载大字段属性

本文介绍了一种在实体类中实现大字段延迟加载的方法,并通过PersistentAttributeInterceptor接口进行读取控制。文中详细展示了如何在Hibernate中配置延迟加载,以及如何为特定属性实现自定义的加载逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实体中有时会有一些字段所占用的空间比较大(如:大String),但一般又用不到的情况,这时就可以使用延迟加载的机制。

@Entity
public class Sutdent implements Serializable, PersistentAttributeInterceptable {

    private static final long serialVersionUID = 1L;

    private PersistentAttributeInterceptor interceptor;

    private String id;

    // 姓名
    private String name;

    // 大字段属性
    private String bigStr;

    // 课程
    List<Course> courses;

    @Id
    @GeneratedValue
    public String getId() {
        return id;
    }

    @Basic(fetch = FetchType.LAZY) 
    @LazyToOne(LazyToOneOption.NO_PROXY)
    public String getBigStr() {
         if (interceptor != null) {
                return (String) interceptor.readObject(this, "bigStr", bigStr);
            }
        return bigStr;
    }

    @OneToMany(fetch = FetchType.LAZY)
    @OrderBy(value = "id ASC")
    public List<Course> getCourses() {
        if (interceptor != null) {
            return (List<Course>) interceptor.readObject(this, "courses", courses);
        }
        return courses;
    }

    // get and set method...

    @Override
    public PersistentAttributeInterceptor $$_hibernate_getInterceptor() {
        return interceptor;
    }

    @Override
    public void $$_hibernate_setInterceptor(PersistentAttributeInterceptor interceptor) {
        this.interceptor = interceptor;
    }
}

二、注意事项:

1、实现PersistentAttributeInterceptor的实体,重写PersistentAttributeInterceptor的get,set方法后才可以使用;
2、PersistentAttributeInterceptor对原来的、添加了ManyToOne、OneToMany等非集合类属性不会产生影响;
3、PersistentAttributeInterceptor对原来的、添加了ManyToOne、OneToMany等集合类则会产生影响,需要在方法中加上类似的代码,此外无需添加其他代码(注解等);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值