Fix for: ENVERS-39 - Add an @Unversioned annotation
plaky Aug 21, 2008 5:25 AMHi together,
I have made a fix for this issue cause I always need this Feature.
Changes:
- Added an @Unversioned-Annotation in org.jboss.envers
- Added a List of unversioned Properties to the org.jboss.envers.metadata.data.PersistentClassVersioningData
- Changed org.jboss.envers.metadata.AnnotationsMetadataReader to read the @Unversioned-Annotation
- Change org.jboss.envers.metadata.VersionsMetadataGenerator to only generate Properties to the xy_versioned-Entity if they aren't
declared as unversioned.
Here's the sample-class from the demo:
package org.jboss.envers.demo; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.jboss.envers.Unversioned; import org.jboss.envers.Versioned; @Entity @Versioned public class Address { @Id @GeneratedValue private int id; private String streetName; private Integer houseNumber; @Unversioned private Integer flatNumber; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStreetName() { return streetName; } public void setStreetName(String streetName) { this.streetName = streetName; } public Integer getHouseNumber() { return houseNumber; } public void setHouseNumber(Integer houseNumber) { this.houseNumber = houseNumber; } public Integer getFlatNumber() { return flatNumber; } public void setFlatNumber(Integer flatNumber) { this.flatNumber = flatNumber; } public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Address)) return false; Address address = (Address) o; if (id != address.id) return false; if (flatNumber != null ? !flatNumber.equals(address.flatNumber) : address.flatNumber != null) return false; if (houseNumber != null ? !houseNumber.equals(address.houseNumber) : address.houseNumber != null) return false; if (streetName != null ? !streetName.equals(address.streetName) : address.streetName != null) return false; return true; } public int hashCode() { int result; result = id; result = 31 * result + (streetName != null ? streetName.hashCode() : 0); result = 31 * result + (houseNumber != null ? houseNumber.hashCode() : 0); result = 31 * result + (flatNumber != null ? flatNumber.hashCode() : 0); return result; } }
Here's my test-code:
Map<String, String> configurationOverrides = new HashMap<String, String>(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("ConsolePU", configurationOverrides); EntityManager entityManager = emf.createEntityManager(); Address addy = new Address(); addy.setFlatNumber(1); addy.setHouseNumber(1); addy.setStreetName("straße 1"); entityManager.getTransaction().begin(); entityManager.persist(addy); entityManager.getTransaction().commit(); addy.setFlatNumber(2); entityManager.getTransaction().begin(); entityManager.persist(addy); entityManager.getTransaction().commit(); entityManager.close(); emf.close();
The resultig database-schema and content of the tables...
Schema:
[img]http://mitglied.lycos.de/sebgehacked/dev/schema.jpg[/img]
Values:
[img]http://mitglied.lycos.de/sebgehacked/dev/values.jpg[/img]
Patch Download: http://people.freenet.de/sebgehacked/envers/fix_39_unversioned_annotation.zip
Hope it helps!
Kind regards,
Sebastian