Digging further into this, there is a major difference in the way the entity
class is instantiated by EciplseLink versus OpenJPA. 
When using eclipselink w/o the transient declaration, the entity class's
overridden setters are called (which in turn call super).
While using OpenJPA with transient declaration for overridden accessors,
only the setters for the super class are called and the overridden setters
are never called. This causes the application to break which depends on the
initialization of non-persistent state in the entity class during the set*.

As an example, lets take the above simple test case. If I need to have a
non-persistent boolean field in UserModelImpl called adult and wrap it with
accessors as isAdult/setAdult. Then I can declare "adult" as a transient and
override the setAge/getAge such that the adult value can be set if the age
is more than 18, in UserModelImpl entity class.
public void setAge(int age) {
    if(age > 18) {
        adult = true;
    }
    super.setAge(age);
}
This will not work with OpenJPA.
-- 
View this message in context: 
http://n2.nabble.com/overriding-accesors-in-entity-need-tranisent-declaration-tp3363414p3372112.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Reply via email to