//@Test
       public void getPEcuByPlatformById() {
               Platform platform = (Platform) em.find(Platform.class, 1);
               Set<PEcu> set = platform.getPecus();
               assertEquals("PEcu count:",27,set.size());
       }

Even in this case I believe since this is a lazy relation, upon execution of
paltform.getPecus() another query for pecus will have to be fired and at
that time Platform.getId() will be called. You can check this by setting
breakpoints.
The problem is same I believe that getId() is returning 0, thta is why set
is also null in this case.
Try changing GenerationType to Sequence or may be .java file definition to
long id and database type to bigint.

I am just trying so might be wrong as well :)



On Wed, Sep 9, 2009 at 2:47 PM, B.L. Zeebub <[email protected]>wrote:

>
>
>
> ashishpaliwal wrote:
> >
> > If the .java definition is long id then mysql definition should be bigint
> > id.
> > But the best solution is to create the java file and let the openjpa
> > create
> > the table on its own. This will happen automatically when the first
> insert
> > statement is called and openjpa finds that there is no such entity
> > registered by this name.
> > If it is possible then create the table and do insertion from openjpa
> > itself.
> >
>
> IMHO I don't think that it's a mismatch between the Java definitions and
> the
> database definitions.
>
> Since I'm developing with the Eclipse IDE I've made a copy of my OpenJPA
> project and changed the JPA provider to EclipseLink. Running the same set
> of
> tests, I get different results. With EclipseLink, all the tests pass except
> those that use EntityManager.createNativeQuery(). Since I know even less
> about EclipseLink that I do about OpenJPA, I have no idea why that should
> be.
>
> So I have experimented further. You will have seen from the definition of
> the Platform entity that there is a relationship with the entity PEcu.
> (I've
> attached both .java files below) So I added the following test
>
> @Test
>        public void getPEcuByPlatformById() {
>                Platform platform = (Platform) em.find(Platform.class, 1);
>                Set<PEcu> set = platform.getPecus();
>                assertEquals("PEcu count:",27,set.size());
>        }
>
> The test passes with EclipseLink and fails with openJPA (set is null). I've
> got the Eclipse OpenJPA build time enhancer (1.2.0) installed from
> http://people.apache.org/~ppoddar/eclipse<http://people.apache.org/%7Eppoddar/eclipse>and
>  from what I can see, it does
> seem to run. I am at a total loss now to know what else to check.
>
> Regards
>
> @Entity
> @Table(name="Platform")
>
> public class Platform implements Serializable {
>        private static final long serialVersionUID = 1L;
>
>        @Id
>        @GeneratedValue(strategy=GenerationType.IDENTITY)
>        @Column(unique=true, nullable=false)
>        private int id;
>
>        @Column(name="PlatformName", length=32)
>        private String platformName;
>
>        //bi-directional many-to-one association to PEcu
>        @OneToMany(mappedBy="platform")
>        private Set<PEcu> pecus;
>
>    public Platform() {
>
>    }
>
>        public int getId() {
>                return this.id;
>        }
>
>        public void setId(int id) {
>                this.id = id;
>        }
>
>        public String getPlatformName() {
>                return this.platformName;
>        }
>
>        public void setPlatformName(String platformName) {
>                this.platformName = platformName;
>        }
>
>        public Set<PEcu> getPecus() {
>                return this.pecus;
>        }
>
>        public void setPecus(Set<PEcu> pecus) {
>                this.pecus = pecus;
>        }
>
> }
>
> @Entity
> @Table(name="PEcu")
> public class PEcu implements Serializable {
>        private static final long serialVersionUID = 1L;
>
>        @EmbeddedId
>        private PEcuPK id;
>
>        @Column(nullable=false, length=1)
>        private String fitment;
>
>        @Column(nullable=false, length=64)
>        private String idsName;
>
>        @Column(nullable=false, length=128)
>        private String idsText;
>
>        @Column(nullable=false, length=3)
>        private String rxAddress;
>
>        //bi-directional many-to-one association to Platform
>        @ManyToOne(fetch=FetchType.LAZY)
>        @JoinColumn(name="platformId", nullable=false, insertable=false,
> updatable=false)
>        private Platform platform;
>
>        //bi-directional many-to-one association to Assembly
>        @OneToMany(mappedBy="pecu")
>        private Set<Assembly> assemblies;
>
>        //bi-directional many-to-one association to PEcuAcronym
>        @OneToMany(mappedBy="pecu")
>        private Set<PEcuAcronym> pecuAcronyms;
>
>        //uni-directional one-to-one association to PEcuText
>        @OneToOne(fetch=FetchType.LAZY)
>        @JoinColumns({
>                @JoinColumn(name="platformId",
> referencedColumnName="platformId",
> nullable=false, insertable=false, updatable=false),
>                @JoinColumn(name="busid", referencedColumnName="busId",
> nullable=false,
> insertable=false, updatable=false),
>                @JoinColumn(name="txaddress",
> referencedColumnName="txAddress",
> nullable=false, insertable=false, updatable=false),
>                })
>        private PEcuText pecuText;
>
>    public PEcu() {
>    }
>
>        public PEcuPK getId() {
>                return this.id;
>        }
>
>        public void setId(PEcuPK id) {
>                this.id = id;
>        }
>
>        public String getFitment() {
>                return this.fitment;
>        }
>
>        public void setFitment(String fitment) {
>                this.fitment = fitment;
>        }
>
>        public String getIdsName() {
>                return this.idsName;
>        }
>
>        public void setIdsName(String idsName) {
>                this.idsName = idsName;
>        }
>
>        public String getIdsText() {
>                return this.idsText;
>        }
>
>        public void setIdsText(String idsText) {
>                this.idsText = idsText;
>        }
>
>        public String getRxAddress() {
>                return this.rxAddress;
>        }
>
>        public void setRxAddress(String rxAddress) {
>                this.rxAddress = rxAddress;
>        }
>
>        public Platform getPlatform() {
>                return this.platform;
>        }
>
>        public void setPlatform(Platform platform) {
>                this.platform = platform;
>        }
>
>        public Set<Assembly> getAssemblies() {
>                return this.assemblies;
>        }
>
>        public void setAssemblies(Set<Assembly> assemblies) {
>                this.assemblies = assemblies;
>        }
>
>        public Set<PEcuAcronym> getPecuAcronyms() {
>                return this.pecuAcronyms;
>        }
>
>        public void setPecuAcronyms(Set<PEcuAcronym> pecuAcronyms) {
>                this.pecuAcronyms = pecuAcronyms;
>        }
>
>        public PEcuText getPecuText() {
>                return this.pecuText;
>        }
>
>        public void setPecuText(PEcuText pecuText) {
>                this.pecuText = pecuText;
>        }
>
> }
>
> @Embeddable
> public class PEcuPK implements Serializable {
>        //default serial version id, required for serializable classes.
>        private static final long serialVersionUID = 1L;
>
>        @Column(unique=true, nullable=false)
>        private int platformId;
>
>        @Column(unique=true, nullable=false)
>        private int busid;
>
>        @Column(unique=true, nullable=false, length=3)
>        private String txaddress;
>
>    public PEcuPK() {
>    }
>        public int getPlatformId() {
>                return this.platformId;
>        }
>        public void setPlatformId(int platformId) {
>                this.platformId = platformId;
>        }
>        public int getBusid() {
>                return this.busid;
>        }
>        public void setBusid(int busid) {
>                this.busid = busid;
>        }
>        public String getTxaddress() {
>                return this.txaddress;
>        }
>        public void setTxaddress(String txaddress) {
>                this.txaddress = txaddress;
>        }
>
>        public boolean equals(Object other) {
>                if (this == other) {
>                        return true;
>                }
>                if (!(other instanceof PEcuPK)) {
>                        return false;
>                }
>                PEcuPK castOther = (PEcuPK)other;
>                return
>                        (this.platformId == castOther.platformId)
>                        && (this.busid == castOther.busid)
>                        && this.txaddress.equals(castOther.txaddress);
>
>    }
>
>        public int hashCode() {
>                final int prime = 31;
>                int hash = 17;
>                hash = hash * prime + this.platformId;
>                hash = hash * prime + this.busid;
>                hash = hash * prime + this.txaddress.hashCode();
>
>                return hash;
>    }
> }
>
> --
> View this message in context:
> http://n2.nabble.com/NEWBIE-OpenJPA-Cannot-get-id-field-returned-tp3601995p3609429.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>



-- 
Ashish Paliwal
Mobile : 9305128367
IIT Kanpur
India

Reply via email to