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; } }
> > >
> > >
> >
>

Reply via email to