当前位置: 首页 > 知识库问答 >
问题:

字节码增强不起作用

葛越泽
2023-03-14

我使用下面的链接作为参考来实现从PostgreSQL DB懒惰加载图像: URL

在我的用户实体中,我声明字节数组字段:

@Lob
@Basic(fetch = FetchType.LAZY)
private byte[] avatar;

在pom.xml文件我包括hiberante增强插件:

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

问题是,当我从数据库中获取用户实体时,也会加载化身html" target="_blank">字节数组,这是我不想要的。

我知道hibernate enhance maven插件应该增强/改变用户。类文件,这没有发生。

我错过什么了吗?

更新:

我执行增强目标:
组织。冬眠奥姆。工具:hibernate enhance maven plugin:enhance
在控制台中,我收到消息:
跳过hibernate字节码增强插件执行,因为没有启用任何功能“
我检查了插件jar文件hibernate-enhance-maven-plugin-5.3.1。最终的jar和我看到下面的代码:

@Mojo(name="enhance", defaultPhase=LifecyclePhase.COMPILE, 
requiresDependencyResolution=ResolutionScope.COMPILE_PLUS_RUNTIME)
public class MavenEnhancePlugin
extends AbstractMojo
{
private List<File> sourceSet = new ArrayList();
@Component
private BuildContext buildContext;
@Parameter(property="base", defaultValue="${project.build.outputDirectory}")
private String base;
@Parameter(property="dir", defaultValue="${project.build.outputDirectory}")
private String dir;
@Parameter(property="failOnError", defaultValue="true")
private boolean failOnError = true;
@Parameter(property="enableLazyInitialization", defaultValue="false")
private boolean enableLazyInitialization;
@Parameter(property="enableDirtyTracking", defaultValue="false")
private boolean enableDirtyTracking;
@Parameter(property="enableAssociationManagement", defaultValue="false")
private boolean enableAssociationManagement;
@Parameter(property="enableExtendedEnhancement", defaultValue="false")
private boolean enableExtendedEnhancement;

private boolean shouldApply()
{
    return (this.enableLazyInitialization) || (this.enableDirtyTracking) || 
    (this.enableAssociationManagement) || (this.enableExtendedEnhancement);
}

public void execute()
throws MojoExecutionException, MojoFailureException
{
if (!shouldApply())
{
  getLog().warn("Skipping Hibernate bytecode enhancement plugin execution since no feature is enabled");
  return;
}
.
.
.
}

看起来shouldApply()方法返回false,但不确定为什么,因为我在pom文件中将属性(enableLazyInitialization)设置为true。

共有1个答案

诸葛彦
2023-03-14

如果您不打算使用插件参与构建生命周期的某些阶段,那么您不应该使用执行。在您的pom.xml中尝试此配置:

        <plugin>
            <groupId>org.hibernate.orm.tooling</groupId>
            <artifactId>hibernate-enhance-maven-plugin</artifactId>
            <version>5.2.13.Final</version>
            <configuration>
                <failOnError>true</failOnError>
                <enableLazyInitialization>true</enableLazyInitialization>
                <enableDirtyTracking>false</enableDirtyTracking>
                <enableAssociationManagement>false</enableAssociationManagement>
            </configuration>
            <goals>
                <goal>enhance</goal>
            </goals>
        </plugin>
 类似资料:
  • 我正在尝试将字节码增强功能添加到基于Java的Hibernate应用程序中。Hibernate是版本5.2.6.final,它内置在maven中,所以我使用的是hibernate-enhance-maven-plugin。我已经测试了以下直到5.2.18.final的问题,但结果是相同的。 “enableAssociationManagement”选项给了我几个问题,应用程序无法增强。我的问题是,

  • 是否有可能使用JPA接口(实体图)急切地加载@*ToOne属性,这些接口使用父实体类中的@LazyToOne、@LazyGroup设置为懒惰,并启用了字节码增强?我正试图急切地使用实体图加载此类属性,但当查询父实体时,它会触发对此类@*ToOne属性的另一个查询。 试图用另一种方法覆盖实体类中的静态获取类型,包括@LazyToOne,它添加了字节码增强功能。 使用Spring 5.1.3、Spri

  • 我安装了Tomcat-7,在端口8443上配置了对TLSV1.2的支持。 我的连接器配置: protocol=“org.apache.coyote.http11.http11nioprotocol”sslenabled=“true”scheme=“https”secure=“true”sslprotocol=“tlsv1.2”sslenabledprotocols=“tlsv1.2”sslenab

  • 问题内容: 我正在使用Hibernate 4.3.6,并且使用了最新的Maven字节码增强功能来检测所有实体是否具有自我污染意识。 我添加了Maven插件: 而且我看到我的实体得到了增强: 调试时,我正在检查方法: 并且始终返回 false 。 这是因为始终为null,因此在设置任何属性时: 由于为null,将绕过trackChange,因此字节码增强功能将无法解析脏属性,并且将使用默认的深度比较

  • 问题内容: 我正在使用Hibernate 4.2并构建时间字节码工具来解决出现在关系上的懒惰问题和(https://developer.jboss.org/wiki/SomeExplanationsOnLazyLoadingone- to-one ) 您知道之间有什么区别吗? Hibernate字节码检测工具:http : //docs.jboss.org/hibernate/orm/4.3/ma

  • 问题内容: 我正在使用Hibernate 4.3.6,并且使用了最新的Maven字节码增强功能来检测所有实体是否具有自我污染意识。 我添加了Maven插件: 而且我看到我的实体得到了增强: 调试时,我正在检查方法: 并且始终返回 false 。 这是因为始终为null,因此在设置任何属性时: 因为为null,将绕过trackChange,因此字节码增强功能将无法解决脏属性,并且将使用默认的深度比较