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 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.