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