Skip to Main Content

Java Development Tools

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

OnetoOne Mapping Problem in EJB 3.0 CMP's

449469Oct 11 2005 — edited Oct 11 2005
Hi,

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.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 8 2005
Added on Oct 11 2005
1 comment
455 views