Jpa/Hibernate 字节码增强:字段延迟加载

Posted 二奎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jpa/Hibernate 字节码增强:字段延迟加载相关的知识,希望对你有一定的参考价值。

JPA提供了@Basic注解,实现延迟加载字段的功能,如下:


    @Basic(fetch = FetchType.LAZY)
    @Column(name = "REMARK_CONTENT" )
    private String remarkContent;

 

但是实际上延迟加是不是起作用的,依然能够出这个字段的数据。

为了延迟加载生效,需要使用字节码增加的插件:

在pom文件中配置:

<plugin>
                <groupId>org.hibernate.orm.tooling</groupId>
                <artifactId>hibernate-enhance-maven-plugin</artifactId>
                <version>5.4.3.Final</version>
                <executions>
                    <execution>
                        <configuration>
                            <failOnError>true</failOnError>
                            <enableLazyInitialization>true</enableLazyInitialization>
                        </configuration>
                        <goals>
                            <goal>enhance</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

compile一下项目之后 ,再运行项目,即可看到效果。JPA只查询了我们需要的特定字段。

但这个有一个缺点,就是需要编译代码,

如果我们不想编译代码,仍然使用字节码增加的话,需要手工代码增加的代码:

    @Basic(fetch = FetchType.LAZY)
    @Column(name = "REMARK_CONTENT" )
    private String remarkContent;

    public String getRemarkContent() {
        if (interceptor!=null) {
            return (String) interceptor.readObject(this, "remarkContent", billView);
        }
        return remarkContent;
    }

    public void setRemarkContent(String remarkContent) {

        if (interceptor!=null) {
            this.remarkContent = (String) interceptor.writeObject(this,"owner", this.billView,billView);
            return ;
        }
        this.remarkContent = remarkContent;
    }

    @Transient
       private PersistentAttributeInterceptor interceptor;

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

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

配置完成!

 

以上是关于Jpa/Hibernate 字节码增强:字段延迟加载的主要内容,如果未能解决你的问题,请参考以下文章

使用 FetchType.LAZY 防止 JPA/Hibernate 中的延迟加载(尤其是在使用 @Transactional 时)?

玩 2.4.6,配置测试中字节码增强的构建设置

hibernate快速入门

基于外键的增量字段(JPA、Hibernate、Oracle DB)

JPA Hibernate 驼峰式字段

JPA / Hibernate中@GeneratedValue中的字段生成器有啥用?