5 Replies Latest reply on Oct 19, 2011 2:41 AM by pderaaij

    Get revision numbers of root entity and their entities in collections

    pderaaij

      At the moment I am experimenting with the envers library in our application for integration. Whenever I do an getRevisions I only get the revisions for the root entity.

       

      However I expect Envers to be able to get the revisions for the entities in the enclosed collections as well. I tried some custom queries but aren't able to combine the two together via a join or something else.

       

       

      The entities are as follow:

       

       

      Entity: form

      {code}

           @Audited

          @Entity(name = "Form")

          @DisplayProperty(displayProperty1 = "name")

          public class Form extends IdentityIdEntity<Integer> {

       

                  @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)

                    @MapKey(name = "id")

                    private Map<Integer, FormElement> elements = new HashMap<Integer, FormElement>();

       

          }

      {/code}

       

      Entity: FormElement

       

      {code}

          @Audited

          @Entity(name = "FormElement")

          @Inheritance(strategy = InheritanceType.JOINED)

          @DisplayProperty(displayProperty1 = "name")

          public abstract class FormElement extends TranslatableIdentityIdEntity<Integer, FormElementTranslation> implements

                              Comparable<FormElement> {

       

                  @Column(length = 50, nullable = false)

                    private String name;

       

          }

      {/code}

       

      Service: FormVersioningService

      {code}

          public List<Number> findVersionsOfForm(Form form) {

                              AuditReader auditReader = AuditReaderFactory.get(sessionFactory.getCurrentSession());

       

                              logger.info(auditReader.getRevisions(Form.class, form.getId()).toString());

       

                              List resultList = auditReader.createQuery().forRevisionsOfEntity(FormElement.class, false, true)

                                                  .addProjection(AuditEntity.revisionNumber()).add(AuditEntity.property("form_id").eq(form.getId()))

                                                  .getResultList();

                              logger.info(resultList);

       

                              return null;

       

                    }

      {/code}

       

      The first log returns:

       

      {quote}

      > INFO: [16, 19, 20, 24]

      {/quote}

       

      The second returns:

       

      {quote}

      > INFO: [24, 25]

        {/quote}

       

      But I'd like to get the following result:

       

      {quote}

      > INFO: [16, 19, 20, 24, 25]

      {/quote}

       

      I'm using Hibernate 3.5.6 and at the moment it isn't possible to upgrade to a new version, so I'm searching for a solution within this version.

       

       

      Any help is welcome and will be appreciated

       

      Original post on Stack Overflow: http://stackoverflow.com/questions/7688430/get-revision-numbers-of-root-entity-and-their-entities-in-collections