You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Property name change casues JaversException, we need 'alias feature' to register old names #178
In the process of developing an application I have had to change a property name in one of my classes. This now leads to an exception being thrown when I try to commit a snapshot of the object to Javers:
JaversException: PROPERTY_NOT_FOUND JaVers runtime error - property 'name' not found in class 'org.xxxx.ips.model.Course'
org.javers.core.metamodel.clazz.ManagedClass.getProperty(ManagedClass.java:56)
org.javers.core.metamodel.object.CdoSnapshotBuilder.withChangedProperties(CdoSnapshotBuilder.java:93)
org.javers.core.json.typeadapter.commit.CdoSnapshotTypeAdapter.deserializeChangedProperties(CdoSnapshotTypeAdapter.java:68)
org.javers.core.json.typeadapter.commit.CdoSnapshotTypeAdapter.fromJson(CdoSnapshotTypeAdapter.java:53)
org.javers.core.json.typeadapter.commit.CdoSnapshotTypeAdapter.fromJson(CdoSnapshotTypeAdapter.java:22)
org.javers.core.json.JsonConverterBuilder$2.deserialize(JsonConverterBuilder.java:139)
com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
com.google.gson.Gson.fromJson(Gson.java:803)
com.google.gson.Gson.fromJson(Gson.java:768)
com.google.gson.Gson.fromJson(Gson.java:717)
com.google.gson.Gson.fromJson(Gson.java:689)
org.javers.core.json.JsonConverter.fromJson(JsonConverter.java:78)
org.javers.repository.mongo.MongoRepository.readFromDBObject(MongoRepository.java:184)
org.javers.repository.mongo.MongoRepository.getLatest(MongoRepository.java:241)
org.javers.repository.mongo.MongoRepository.getLatest(MongoRepository.java:79)
org.javers.repository.api.JaversExtendedRepository.getLatest(JaversExtendedRepository.java:100)
org.javers.core.snapshot.GraphShadowFactory.createLatestShadow(GraphShadowFactory.java:32)
org.javers.core.snapshot.GraphSnapshotFacade.createLatestShadow(GraphSnapshotFacade.java:22)
org.javers.core.commit.CommitFactory.create(CommitFactory.java:76)
org.javers.core.JaversCore.commit(JaversCore.java:60)
.....
Clearing the mongo db of all data associated with the object clears the issue, but obviously this will be problematic with a live system. Is there a way that Javers can deal with property name changes to underlying objects without loosing all historical audit data associated with them?
Currently Javers doesn't support property name changes, but I think it could be very nice feature if you have some ideas how to deal with it we could discuss it and prepare some solution :), for now you can execute some script updating Javers sctructures or change your class name and store changes from the beggining.
From an audit point of view, as long as the old property data was available in historical snapshots I would be happy. I guess that may make diffs more difficult, though to me it would seem logical to treat the now missing data as null and maybe store a Change to record when it was noticed that the old property was no longer present.
I haven't browsed the source extensively so I'm not too familiar with Javers internals, but looking at the ManagedClass source, I wonder if there is a way to make it aware of class versions? I was thinking along the lines of storing a Map of per-class property names keyed by Serial Version ID somewhere, with the data persisted somewhere in the schema? The obvious downside to this is that versioned classes using this feature would have to be Serializable.
The property alias idea sounds like a good feature, though would it cope with property deletion as well as re-naming?
Aliases could be use to handle renames. For example if you rename 'name' to 'forename' , you will add an alias 'name' to property 'forename'. Not sure about this class versioning idea. I think you can have only one class version loaded at a time.
changed the title [-]Property change casues JaversException: PROPERTY_NOT_FOUND[/-][+]Property name change casues JaversException, we need 'alias feature' to register old names[/+]on Jul 18, 2015
good news, JaVers 1.4.0-RC1 is ready, it gives you @TypeName annotation
and support for domain classes refactoring.
Check it out and give me feedback, does it solve your issue?
Activity
pszymczyk commentedon Jul 8, 2015
Hi
Currently Javers doesn't support property name changes, but I think it could be very nice feature if you have some ideas how to deal with it we could discuss it and prepare some solution :), for now you can execute some script updating Javers sctructures or change your class name and store changes from the beggining.
bartoszwalacik commentedon Jul 8, 2015
We could introduce aliases for properties and also for class names, configured in JaversBuilder
TimSin commentedon Jul 9, 2015
From an audit point of view, as long as the old property data was available in historical snapshots I would be happy. I guess that may make diffs more difficult, though to me it would seem logical to treat the now missing data as null and maybe store a Change to record when it was noticed that the old property was no longer present.
I haven't browsed the source extensively so I'm not too familiar with Javers internals, but looking at the ManagedClass source, I wonder if there is a way to make it aware of class versions? I was thinking along the lines of storing a Map of per-class property names keyed by Serial Version ID somewhere, with the data persisted somewhere in the schema? The obvious downside to this is that versioned classes using this feature would have to be Serializable.
The property alias idea sounds like a good feature, though would it cope with property deletion as well as re-naming?
bartoszwalacik commentedon Jul 9, 2015
Aliases could be use to handle renames. For example if you rename 'name' to 'forename' , you will add an alias 'name' to property 'forename'. Not sure about this class versioning idea. I think you can have only one class version loaded at a time.
[-]Property change casues JaversException: PROPERTY_NOT_FOUND[/-][+]Property name change casues JaversException, we need 'alias feature' to register old names[/+]https://github.com/javers/javers/issues/178
https://github.com/javers/javers/issues/178
bartoszwalacik commentedon Dec 10, 2015
good news, JaVers 1.4.0-RC1 is ready, it gives you
@TypeNameannotationand support for domain classes refactoring.
Check it out and give me feedback, does it solve your issue?