1

I have to store table name in my auditing table and for that I am using hibernate envers. I am trying to implement the example in my sample application given in hibernate envers documentation. you can refer this link for code https://docs.jboss.org/hibernate/core/4.2/devguide/en-US/html/ch15.html#envers-tracking-modified-entities-revchanges but this code is not working and giving me error

 java.lang.IllegalArgumentException: Can not set int field hibernate.ModifiedEntityTypeEntity.id to java.lang.String

Please find my code here

@Entity
@RevisionEntity(CustomEntityTrackingRevisionListener.class)
public class CustomTrackingRevisionEntity {
    @Id
    @GeneratedValue
    @RevisionNumber
    private int customId;

    @RevisionTimestamp
    private long customTimestamp;

    @OneToMany(mappedBy="revision", cascade={CascadeType.PERSIST, CascadeType.REMOVE})
    private Set<ModifiedEntityTypeEntity> modifiedEntityNames =
                                                  new HashSet<ModifiedEntityTypeEntity>();

    public void addModifiedEntityType(String entityClassName) {
        modifiedEntityNames.add(new ModifiedEntityTypeEntity(this, entityClassName));
    }
  //getter and setters
 }
==============================================================================
public class CustomEntityTrackingRevisionListener
implements EntityTrackingRevisionListener {

    @Override
    public void entityChanged(Class entityClass, String entityName,
            Serializable entityId, RevisionType revisionType,
            Object revisionEntity)
    {

        String type = entityClass.getName();
        CustomTrackingRevisionEntity customeEntity = (CustomTrackingRevisionEntity)revisionEntity;
        customeEntity.addModifiedEntityType(type);

    }

    @Override
    public void newRevision(Object revisionEntity) {
    }
}
=============================================================
    @Entity
public class ModifiedEntityTypeEntity {
    @Id
    private int id;

    @ManyToOne
    @JoinColumn(name="revision_customId", nullable=false)
    private CustomTrackingRevisionEntity revision;

    private String entityClassName;

    public ModifiedEntityTypeEntity(CustomTrackingRevisionEntity revision , String entityClassName)
    {
       this.revision = revision;
       this.entityClassName = entityClassName;      
    }
    //getter and setters
 }

I have tried to find out the solution but nothing worked. Kindly help me out. Thanks in advance

rishi
  • 1,792
  • 5
  • 31
  • 63

0 Answers0