OnetoOne Mapping Problem in EJB 3.0 CMP's
449469Oct 11 2005 — edited Oct 11 2005Hi,
Im new EJB3.0, and trying to implement onetoone mapping between two tables.
The beans are deployed successfully, but when I find an object using the EntityManager, it is throwing
java.sql.SQLException: ORA-00904: "COLUMN_NAME": invalid identifier.
When I am using the following tables and Classes,
The searching statement is as follows:
SELECT COMPANYID, COMPANYNAME, COMPANYADDR, ENAME, EMPNO FROM COMPANY WHERE ((COMPANYID = 'MUM') AND (COMPANYNAME = 'MUMBAI'))
But I want to retieve the Company Details, and Employee details individually,
Please help me to sort this out.
The script for tables is:
--------------------------------------------------------------------------------------------------------------
create table emp (empno VARCHAR2(4),ENAME VARCHAR2(10),SAL NUMBER(10,2),companyid varchar2(10) ,companyname varchar2(20),primary key(empno,ename,companyid,companyname));
create table company(companyid varchar2(10),companyname varchar2(20),companyaddr varchar2(20) not null,primary key(companyid,companyname));
ALTER TABLE EMP ADD CONSTRAINT PROJ_EMP_EMPLOYEE FOREIGN KEY (companyid,companyname) REFERENCES company(companyid,companyname);
desc company;
desc emp;
insert into company values('MUM','MUMBAI','MUMBAI BASTI');
insert into company values('CHE','CHENNAI','CHENNAI NAGAR');
insert into company values('HYD','HYDERABAD','HYDERABAD HITECH');
insert into emp values('12','GANGADHAR','2500','MUM','MUMBAI');
insert into emp values('16','SESHU','6500','CHE','CHENNAI');
insert into emp values('18','RUSTUM','8500','HYD','HYDERABAD');
COMMIT;
--------------------------------------------------------------------------------------------------------------
And the two Entitys and its primary keys are :
Company.java ( Entity Class , CMP)
--------------------------------------------------------------------------------------------------------------
package com.foursoft.hr;
import java.util.*;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.OneToOne;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Column;
import javax.persistence.Table;
import static javax.persistence.CascadeType.*;
import static javax.persistence.FetchType.*;
import static javax.persistence.EntityType.*;
@IdClass("com.foursoft.hr.CompanyPK")
@Entity()
@Table(name="COMPANY")
public class Company implements Serializable
{
public String companyid;
public String companyname;
public String companyaddr;
private Employee employee;
public Company(){}
@Id
@Column(name="COMPANYID",primaryKey=true)
public String getCompanyid(){ return companyid; }
public void setCompanyid(String compid){ companyid = compid; }
@Id
@Column(name="COMPANYNAME",primaryKey=true)
public String getCompanyname(){ return companyname; }
public void setCompanyname(String compname){ companyname = compname; }
public String getCompanyaddr(){ return companyaddr; }
public void setCompanyaddr(String compaddr){ companyaddr = compaddr; }
@OneToOne(targetEntity="com.foursoft.hr.Employee", cascade=ALL )
public Employee getEmployee()
{
return employee;
}
public void setEmployee(Employee employee)
{
this.employee = employee;
}
public String toString()
{
StringBuffer buf = new StringBuffer();
buf.append("Class:")
.append(this.getClass().getName())
.append(" :: ")
.append(" COMPANYID:")
.append(getCompanyid())
.append(" COMPANYNAME:")
.append(getCompanyname());
return buf.toString();
}
}
--------------------------------------------------------------------------------------------------------------
CompanyPK.java (Primary Key Class for Company Table)
--------------------------------------------------------------------------------------------------------------
package com.foursoft.hr;
public class CompanyPK implements java.io.Serializable
{
public java.lang.String companyid;
public java.lang.String companyname;
public boolean equals(Object obj){
CompanyPK pkObj = (CompanyPK)obj;
return (companyid.equals(pkObj.companyid) && companyname.equals(pkObj.companyname));
}
public int hashCode(){
try {
long crcKey = -1;
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(bos);
oos.writeObject(this);
oos.flush();
java.util.zip.Adler32 adl32 = new java.util.zip.Adler32();
adl32.update(bos.toByteArray());
crcKey = adl32.getValue();
return (int)(crcKey ^ (crcKey >> 32));
} catch (java.io.IOException ioEx) {
return -1;
}
}
}
--------------------------------------------------------------------------------------------------------------
Employee.java (Entity Class, CMP)
--------------------------------------------------------------------------------------------------------------
package com.foursoft.hr;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Column;
import javax.persistence.IdClass;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import static javax.persistence.CascadeType.*;
import static javax.persistence.FetchType.*;
@IdClass("com.foursoft.hr.EmployeePK")
@Entity
@Table(name = "EMP")
public class Employee implements java.io.Serializable
{
private String empNo;
private String eName;
private double sal;
private Company company;
private String companyid;
private String companyname;
@Id
@Column(name="EMPNO",primaryKey=true)
public String getEmpNo() { return empNo; }
public void setEmpNo(String empNo) { this.empNo = empNo; }
@Id
@Column(name="ENAME" , primaryKey=true)
public String getEName() { return eName; }
public void setEName(String eName) { this.eName = eName; }
public double getSal() { return sal; }
public void setSal(double sal) { this.sal = sal; }
@OneToOne(fetch=LAZY,optional=false)
public Company getCompany() { return company; }
public void setCompany(Company company) { this.company=company; }
public String toString()
{
StringBuffer buf = new StringBuffer();
buf.append("Class:")
.append(this.getClass().getName())
.append(" :: ")
.append(" empNo:")
.append(getEmpNo())
.append(" ename:")
.append(getEName())
.append(" sal:")
.append(getSal());
return buf.toString();
}
}
--------------------------------------------------------------------------------------------------------------
EmployeePK.java (Primary Key Class for Employee Table)
--------------------------------------------------------------------------------------------------------------
package com.foursoft.hr;
public class EmployeePK implements java.io.Serializable
{
public java.lang.String empNo;
public java.lang.String eName;
public boolean equals(Object obj){
EmployeePK pkObj = (EmployeePK)obj;
return (empNo.equals(pkObj.empNo)&& eName.equals(pkObj.eName));
}
public int hashCode(){
try {
long crcKey = -1;
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(bos);
oos.writeObject(this);
oos.flush();
java.util.zip.Adler32 adl32 = new java.util.zip.Adler32();
adl32.update(bos.toByteArray());
crcKey = adl32.getValue();
return (int)(crcKey ^ (crcKey >> 32));
} catch (java.io.IOException ioEx) {
return -1;
}
}
}
--------------------------------------------------------------------------------------------------------------
Thanks very much!
Gangadhar.