Estamos utilizando Hibernate Envers y tenemos la siguiente situación:Hibernate Envers y "Javassist Mejora falló" Excepción
Una clase BusinessObjectType
y una clase Identity
con una referencia a 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;
[…]
}
A continuación, consulta para toda la versión de identidad con:
AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity(
Identity.class,
false,
true);
auditQuery.add(AuditEntity.id().eq(dbid));
@SuppressWarnings("unchecked")
List< Object[]> history = (List< Object[]>) auditQuery.getResultList();
Si la identidad almacenada no tiene un BusinessObjectType
(es decir, businessObjectType
es y fue nulo) todo funciona como un amuleto.
Si la identidad tenía una businessObjectType != null
obtenemos un "Javassist Mejora fallido" Excepción:
Javassist Enhancement failed: ch.ethz.id.wai.baseclasses.BusinessObjectType
El error parece estar relacionada con Envers tratando de crear instancias de un BusinessObjectType pero yo no veo cuál es el problema podría ser (Hibernate no tiene problemas con ambos objetos si no usamos AuditQuery).
La causa de la excepción es
java.lang.InstantiationException: ch.ethz.id.wai.baseclasses.BusinessObjectType_$$_javassist_49
sin seguimiento de la pila.
¿Alguna pista sobre cuál podría ser el problema?
La obtención es el valor predeterminado: SELECCIONAR. El constructor no era público Gracias.Todavía tengo que entender por qué Envers quiere crear una instancia más que simple Hibernate. – Matteo
¿por qué el constructor predeterminado debe ser 'public'? Veo una respuesta potencialmente conflictiva [aquí] (http://stackoverflow.com/questions/2935826/why-does-hibernate-require-no-argument-constructor#comment9688725_2971717) –