gpt4 book ai didi

hibernate 环境和 "Javassist Enhancement failed"异常

转载 作者:行者123 更新时间:2023-12-03 23:28:56 25 4
gpt4 key购买 nike

我们正在使用 Hibernate Envers 并且有以下情况:

A类BusinessObjectType和一个类(class)Identity引用 BusinessObjectType :

@Entity
@Table( name = "ID_IDENTITY" )
@Audited
public class Identity {

@ManyToOne
@JoinColumn( name = "BO_TYPE_ID" )
@IndexColumn( name = "INDEX_BO_BO_TYPE" )
private BusinessObjectType businessObjectType;

[…]

}

然后,我们使用以下命令查询所有版本的 Identity:
AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity(
Identity.class,
false,
true );
auditQuery.add( AuditEntity.id().eq( dbid ) );

@SuppressWarnings( "unchecked" )
List< Object[]> history = (List< Object[]>) auditQuery.getResultList();

如果存储的身份没有 BusinessObjectType (即, businessObjectType 是并且是空的)一切都像一个魅力。

如果身份有 businessObjectType != null我们得到一个“Javassist Enhancement failed”异常:
Javassist Enhancement failed: ch.ethz.id.wai.baseclasses.BusinessObjectType

该错误似乎与尝试实例化 BusinessObjectType 的 Envers 有关,但我并没有真正看到问题所在(如果我们不使用 AuditQuery,Hibernate 对这两个对象都没有问题)。

异常的原因是
java.lang.InstantiationException: ch.ethz.id.wai.baseclasses.BusinessObjectType_$$_javassist_49

没有堆栈跟踪。

关于问题可能是什么的任何提示?

最佳答案

这发生在下面的类中 JavassistLazyInitializer基于 Javassist 的惰性初始化器代理。

如果不查看完整源代码,很难发表评论,但您可以尝试以下选项。

  • 关闭 @ManyToOne 关系的延迟加载 [ 这是一个设计决定,因此请注意它是否不适合整体解决方案 ]
  • 为导致问题的实体提供默认的公共(public)构造函数[这更容易]
  • 如果不是真的需要通过设置 hibernate.bytecode.use_reflection_optimizer 关闭反射优化属性为假

  • 让我们知道这是否有帮助

    关于 hibernate 环境和 "Javassist Enhancement failed"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7273125/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com