zoukankan      html  css  js  c++  java
  • 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;
        }

    配置完成!

  • 相关阅读:
    windows用户管理与远程管理
    Linux之基础网络配置
    linux之程序包管理
    linux之特殊权限
    设计模式学习笔记——Prototype原型模式
    设计模式学习笔记——Visitor 访问者模式
    XXX is not a function
    终于决定要开始写自己的博客了,先Mark一下
    element ui 与vue跨域通信操作 和框架语法,contentype
    跨域与版本控制
  • 原文地址:https://www.cnblogs.com/hankuikui/p/11733877.html
Copyright © 2011-2022 走看看