- 
        1. Re: Retrieve by dateamarsingh Dec 10, 2008 3:04 PM (in response to amarsingh)Please note the version I am using is: 
 Envers 1.1.0 compatible for Hibernate 3.2.6
- 
        2. Re: Retrieve by dateadamw Dec 11, 2008 11:00 AM (in response to amarsingh)Hello, 
 in 1.1 you can use the getRevisionNumberForDate(Date) in VersionsReader, to find a revision number for a given date. You cannot unforutnately use a date directly in a query.
 In trunk, you can use the following restriction in your query:
 AuditEntity.revisionProperty("timestamp").eq(your value)
 --
 Adam
- 
        3. Re: Retrieve by dateamarsingh Dec 11, 2008 11:54 AM (in response to amarsingh)Thanks. Yeah, your solution was what I concluded with. 
- 
        4. Re: Retrieve by datedesol4tion Aug 25, 2011 4:37 AM (in response to amarsingh)Hi, i would like to do the same thing : getAuditReader().createQuery().forRevisionsOfEntity(Clazz.class, true, false) .add(AuditEntity.revisionProperty("timestamp").maximize().add(AuditEntity.id().eq(clazz.getId())) .add(AuditEntity.revisionProperty("timestamp").le(date))).getSingleResult(); but i dont' want to do this for one instance of my class, so i don't want to specify the id because i don't know it and my result was a list. In fact, i would like to have the latest revision of all my object at a specific date : date 1 : create obj1 (revision0) create obj2 (revision1) date 2 : update obj1 (revision2) date 3 : update obj1 (revision3) date 4 : update obj1 (revision4) I would like my query return me my objects at the date "date3" so i would like to have the revision 3 and the revision 1. Please help me. Thx 
- 
        5. Re: Retrieve by dateadamw Aug 29, 2011 8:01 AM (in response to desol4tion)Well, did you try not specifying the id? Or simply: 1. obtain the revision number corresponding to the id using AuditReader.revisionForDate 2. query for entities at that revision If you get a revision for date3, and try reading obj1 and obj2 at that revision, you will get the data that you need. Regards, Adam Warski 
- 
        6. Re: Retrieve by datedesol4tion Aug 29, 2011 8:21 AM (in response to adamw)But if i do like you tell me, i have to do X calls on envers where X is the number of differents data (id) on my audited table. Exemple : if i have 4 distinct objects with id = 1,2,3 and 4, i have to call envers one time to obtain the revision number of my data with id =1 at the date D, then i have to call it again to obtain the values i want. Same thing for my three other objects. So i have to do 8 calls to do this if i've understanded correctly what you tell me. 
- 
        7. Re: Retrieve by dateadamw Aug 29, 2011 8:39 AM (in response to desol4tion)You only need to get the revision number once, for the specified date. Then you can read all of the entities in a single query, or in multiple queries. So that's max 2 queries/Envers calls. Adam 
- 
        8. Re: Retrieve by datedesol4tion Aug 29, 2011 8:48 AM (in response to desol4tion)But it's difference instances of only one entity so if i put a static revision number, it'll return me only one instance, do you see what i want to do In fact, i just want to do the same thing that : select p from person where p.date = ( select max(p2.date) from person p2 where p2.id = p.id and p2.date <= dateParam ) with envers' queries but is it possible to do subquery with envers? 
- 
        9. Re: Retrieve by datedrsaturno Aug 29, 2011 11:45 AM (in response to desol4tion)While my performance test, I realize that if we base our revision retrieve only in dates, revisions generated in less than 1ms apart could not be unique. I prefer to rely on revision number. 
- 
        10. Re: Retrieve by dateadamw Aug 30, 2011 10:56 AM (in response to desol4tion)"if i put a static revision number, it'll return me only one instance, do you see what i want to do" I don't think that's true. I think you also may misunderstand the revision system, or I misunderstand you. If you have the following modifications: rev1: insert person1 (p1a) (id = 1) rev2: insert person2 (p2a) (id = 2) rev3: update person2 (p2b) rev4: update person1 (p1b) Then, if you read person with id = 1 at revision 1, 2 or 3 you will get the p1a object. Similarly, if you read person with id = 2 at revision 4, you will get p2b. So if you have one revision number, you can get all the persons at that revision with one query. 
 Adam
- 
        11. Re: Retrieve by datedesol4tion Aug 31, 2011 3:59 AM (in response to adamw)I understand it but i don't see how to make this query : if i do Number revisionMax = reader.getRevisionNumberForDate(dateEffetRecherche); ------ For exemple 3 AuditQuery query = reader.createQuery().forRevisionsOfEntity(PersonEntity.class,false, true); query.add(AuditEntity.revisionNumber().eq(revisionMax)); ----- we take the revision 3 query.add(AuditEntity.id().eq(1)); ---- Will singleResult be p1a ? if i do Number revisionMax = reader.getRevisionNumberForDate(dateEffetRecherche); ------ For exemple 3 AuditQuery query = reader.createQuery().forRevisionsOfEntity(PersonEntity.class,false, true); query.add(AuditEntity.revisionNumber().eq(revisionMax)); ----- we take the revision 3 query.add(AuditEntity.id().eq(2)); ---- singleResult will be p2b Finally, i want p1a and p2b so i have to don't specify the id Number revisionMax = reader.getRevisionNumberForDate(dateEffetRecherche); ------ For exemple 3 AuditQuery query = reader.createQuery().forRevisionsOfEntity(PersonEntity.class,false, true); query.add(AuditEntity.revisionNumber().eq(revisionMax)); ----- we take the revision 3 And i tested that, and the result is only the person at the revision 3 so i got p2b. I got the good result if i add i don't use : query.add(AuditEntity.revisionNumber().eq(revisionMax)); but i use this : 
- 
        12. Re: Retrieve by dateadamw Sep 6, 2011 11:00 AM (in response to desol4tion)I think you should be using the entities-at-revision query (reader.createQuery().forEntitiesAtRevision()), as you are interested in entities at a given point in time, not in the whole history of entities. If you do: AuditQuery query = reader.createQuery().forRevisionsOfEntity(PersonEntity.class,false, true); query.add(AuditEntity.revisionNumber().eq(revisionMax)); You will get *only* the entities which were modified *exactly* at revision 3. Not entities which also existed at rev 3, but were not modified. Adam 
- 
        13. Re: Retrieve by datedesol4tion Sep 9, 2011 8:54 AM (in response to adamw)Thanks adam, it works pretty fine, it's exactly what i nedd to do, i just didn't know this function ! 
 
     
     
    