openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Janko Heilgeist <janko.heilge...@rzg.mpg.de>
Subject Re: JPAAnnotations on the instance variable or on the getter
Date Tue, 15 Apr 2008 05:50:04 GMT
Hi Michael,

Michael Dick wrote:
> If you put the annotations on a get or set method then the JPA
> provider will expect property access to be used (ie 
> PersonNew.setFirstName("John")).

JPA specification, section 2.1.1:

"[...] When property-based access is used, the object/relational mapping 
annotations for the entity class annotate the getter property 
accessors[2]. [...]

[2] These annotations must not be applied to the setter methods."

> In the example below the fields are private which is probably the
> root problem when you use field access.

JPA specification, section 2.1.1:

"[...] The persistent state of an entity is represented by instance 
variables [...] Instance variables must be private, protected, or 
package visibility. [...]"

So this should not be the problem. But I can't see anything wrong 
either. Lars, can you post the stacktrace of your NPE?

Regards, Janko


> 
> Have you tried making the fields public in the Person class you
> provided?
> 
> hth, Mike
> 
> 
> 
> On Mon, Apr 14, 2008 at 2:04 AM, Lars Vogel
> <lars.vogel@googlemail.com> wrote:
> 
>> Hi,
>> 
>> my understanding so far was that it doesn't matter if I have the 
>> annotation on the instance variable or on the the getter method of
>> the class.
>> 
>> It that true? Because I have an example where I receive a Null
>> pointer exception if I put the annotation on the instance variable
>> and not on the getter. Example below. The error occurs during the
>> access of the JobList variable. The whole project is attached in
>> case someone would like to have a look. For testing just exchange
>> PersonNew.java with Person.java.
>> 
>> Best regards, Lars
>> 
>> ----------
>> 
>> This works: ------------------------------
>> 
>> package datamodel.impl;
>> 
>> import java.util.ArrayList; import java.util.List;
>> 
>> import javax.persistence.Column; import javax.persistence.Entity; 
>> import javax.persistence.GeneratedValue; import
>> javax.persistence.GenerationType; import javax.persistence.Id; 
>> import javax.persistence.OneToMany; import
>> javax.persistence.OrderBy; import javax.persistence.Transient;
>> 
>> import org.apache.openjpa.persistence.PersistentCollection;
>> 
>> import datamodel.IPerson;
>> 
>> @Entity public class PersonNew implements IPerson { private String
>> id; private String firstName; private String lastName;
>> 
>> private String nonsenseField = "";
>> 
>> private List<Job> jobList = new ArrayList<Job>();
>> 
>> private List<String> nickNameList = new ArrayList<String>();
>> 
>> @Id @GeneratedValue(strategy=GenerationType.SEQUENCE) public String
>> getId() { return id; }
>> 
>> public void setId(String Id) { this.id = Id; }
>> 
>> 
>> public String getFirstName() { return firstName; }
>> 
>> public void setFirstName(String firstName) { this.firstName =
>> firstName; }
>> 
>> // Leave the standard column name of the table public String
>> getLastName() { return lastName; }
>> 
>> public void setLastName(String lastName) { this.lastName =
>> lastName; }
>> 
>> @Transient public String getNonsenseField() { return nonsenseField;
>>  }
>> 
>> public void setNonsenseField(String nonsenseField) { 
>> this.nonsenseField = nonsenseField; }
>> 
>> @OneToMany public List<Job> getJobsList() { return this.jobList; }
>> 
>> public void setJobsList(List<Job> nickName) { this.jobList =
>> nickName; }
>> 
>> @PersistentCollection @OrderBy public List<String>
>> getNickNameList() { return nickNameList; }
>> 
>> public void setNickNameList(List<String> nickNameString) { 
>> this.nickNameList = nickNameString; } }
>> 
>> 
>> This results in an error:
>> 
>> package datamodel.impl;
>> 
>> import java.util.ArrayList; import java.util.List;
>> 
>> import javax.persistence.Column; import javax.persistence.Entity; 
>> import javax.persistence.GeneratedValue; import
>> javax.persistence.GenerationType; import javax.persistence.Id; 
>> import javax.persistence.OneToMany; import
>> javax.persistence.OrderBy; import javax.persistence.Transient;
>> 
>> import org.apache.openjpa.persistence.PersistentCollection;
>> 
>> import datamodel.IPerson;
>> 
>> @Entity public class Person implements IPerson { @Id 
>> @GeneratedValue(strategy=GenerationType.SEQUENCE) private String
>> id; private String firstName; private String lastName;
>> 
>> @Transient private String nonsenseField = ""; @OneToMany private
>> List<Job> jobList = new ArrayList<Job>(); @PersistentCollection 
>> @OrderBy private List<String> nickNameList = new
>> ArrayList<String>();
>> 
>> 
>> public String getId() { return id; }
>> 
>> public void setId(String Id) { this.id = Id; }
>> 
>> 
>> public String getFirstName() { return firstName; }
>> 
>> public void setFirstName(String firstName) { this.firstName =
>> firstName; }
>> 
>> // Leave the standard column name of the table public String
>> getLastName() { return lastName; }
>> 
>> public void setLastName(String lastName) { this.lastName =
>> lastName; }
>> 
>> public String getNonsenseField() { return nonsenseField; }
>> 
>> public void setNonsenseField(String nonsenseField) { 
>> this.nonsenseField = nonsenseField; }
>> 
>> 
>> public List<Job> getJobsList() { return this.jobList; }
>> 
>> public void setJobsList(List<Job> nickName) { this.jobList =
>> nickName; }
>> 
>> 
>> public List<String> getNickNameList() { return nickNameList; }
>> 
>> public void setNickNameList(List<String> nickNameString) { 
>> this.nickNameList = nickNameString; } }
>> 
> 


Mime
View raw message