Hi Janko, the sytem gives me a NPE if I try to access the collection for Jobs.
Exception in thread "main" java.lang.NullPointerException at main.Main.main(Main.java:77) This part is where my test code tries to access the list of jobs (indicated via // This is line 77) In my example this works if the annotation is on the getter. The complete coding is in my first posting. Best regards, Lars ------ // Go through each of the entities and print out each of their // messages, as well as the date on which it was created for (Person m : (List<Person>) q.getResultList()) { System.out.println("Say hello to " + m.getFirstName() + " " + m.getLastName()); // Job will always be filled in this example IJob2 job = m.getJobList().get(0); // This is line 77 System.out.println("He earns " + job.getSalery() + " in his job as " + job.getJobDescr()); // Lets printout the family he belongs to System.out.println("Family " +m.getFamily().getDescription()); // Same here, nickname will in this example always be filled. System.out.println("His nickname is " + m.getNickNameList().get(0)); } 2008/4/15, Janko Heilgeist <[EMAIL PROTECTED]>: > > 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 > > <[EMAIL PROTECTED]> 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; } } > > > > > > > > >