I have an issue in joining two tables column. I have two entities Status Report and Employee. and I want the data of employee inside StatusReport.
package com.sl.ems.models;
import javax.persistence.*;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;
@Entity
@Table(name="statusreport")
public class StatusReport {
private BigInteger COMPLIANCEID;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigInteger STATUSRPTID;
private BigInteger EMPID;
private String COMMENTS;
private Date CREATEDDATE;
private BigInteger DEPARTMENT_ID;
@OneToOne
@JoinTable(name = "Employees")
@JoinColumn(name = "EMPID")
private Employees employee;
public StatusReport(){
}
public StatusReport(BigInteger COMPLIANCEID,BigInteger EMPID,
String COMMENTS,Date CREATEDDATE,BigInteger DEPARTMENT_ID){
this.COMPLIANCEID=COMPLIANCEID;
this.EMPID=EMPID;
this.COMMENTS=COMMENTS;
this.CREATEDDATE=CREATEDDATE;
this.DEPARTMENT_ID=DEPARTMENT_ID;
}
public BigInteger getCOMPLIANCEID() {
return COMPLIANCEID;
}
public void setCOMPLIANCEID(BigInteger COMPLIANCEID) {
this.COMPLIANCEID = COMPLIANCEID;
}
public BigInteger getSTATUSRPTID() {
return STATUSRPTID;
}
public void setSTATUSRPTID(BigInteger STATUSRPTID) {
this.STATUSRPTID = STATUSRPTID;
}
public BigInteger getEMPID() {
return EMPID;
}
public void setEMPID(BigInteger EMPID) {
this.EMPID = EMPID;
}
public String getCOMMENTS() {
return COMMENTS;
}
public void setCOMMENTS(String COMMENTS) {
this.COMMENTS = COMMENTS;
}
public Date getCREATEDDATE() {
return CREATEDDATE;
}
public void setCREATEDDATE(Date CREATEDDATE) {
this.CREATEDDATE = CREATEDDATE;
}
public BigInteger getDEPARTMENT_ID() {
return DEPARTMENT_ID;
}
public void setDEPARTMENT_ID(BigInteger DEPARTMENT_ID) {
this.DEPARTMENT_ID = DEPARTMENT_ID;
}
public Employees getEmployee() {
return employee;
}
public void setEmployee(Employees employee) {
this.employee = employee;
}
}
Another class is the employee:
package com.sl.ems.models;
import com.sl.ems.utils.Utils;
import javax.persistence.*;
import java.math.BigInteger;
import java.util.Date;
@Entity
public class Employees {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigInteger EMPID;
private String FIRSTNAME;
private String LASTNAME;
private Date DOB;
private String EMAIL;
private BigInteger DEPARTMENT_ID;
@OneToOne
@JoinTable(name = "Department")
@JoinColumn(name = "DEPARTMENT_ID")
private Department department;
public Employees(){
}
public Employees(String FIRSTNAME,String LASTNAME,Date DOB,String EMAIL,BigInteger DEPARTMENT_ID){
this.FIRSTNAME=FIRSTNAME;
this.LASTNAME=LASTNAME;
this.DOB=DOB;
this.EMAIL=EMAIL;
this.DEPARTMENT_ID=DEPARTMENT_ID;
}
public BigInteger getEMPID() {
return EMPID;
}
public void setEMPID(BigInteger EMPID) {
this.EMPID = EMPID;
}
public String getFIRSTNAME() {
return FIRSTNAME;
}
public void setFIRSTNAME(String FIRSTNAME) {
this.FIRSTNAME = FIRSTNAME;
}
public String getLASTNAME() {
return LASTNAME;
}
public void setLASTNAME(String LASTNAME) {
this.LASTNAME = LASTNAME;
}
public Date getDOB() {
return DOB;
}
public void setDOB(Date DOB) {
this.DOB = DOB;
}
public String getEMAIL() {
return EMAIL;
}
public void setEMAIL(String EMAIL) {
this.EMAIL = EMAIL;
}
public BigInteger getDEPARTMENT_ID() {
return DEPARTMENT_ID;
}
public void setDEPARTMENT_ID(BigInteger DEPARTMENT_ID) {
this.DEPARTMENT_ID = DEPARTMENT_ID;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
As you can see employee entity itself have some other joins on other tables. Which is a deparment table.
package com.sl.ems.models;
import javax.persistence.*;
import java.math.BigInteger;
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigInteger DEPARTMENT_ID;
private String DEPARTMENT_NM;
public Department(){
}
public Department(String DEPARTMENT_NM){
this.DEPARTMENT_NM=DEPARTMENT_NM;
}
public BigInteger getDEPARTMENT_ID() {
return DEPARTMENT_ID;
}
public void setDEPARTMENT_ID(BigInteger DEPARTMENT_ID) {
this.DEPARTMENT_ID = DEPARTMENT_ID;
}
public String getDEPARTMENT_NM() {
return DEPARTMENT_NM;
}
public void setDEPARTMENT_NM(String DEPARTMENT_NM) {
this.DEPARTMENT_NM = DEPARTMENT_NM;
}
}
When I join Status Report with Employee I get Sql exception. But strangly when I remove join of Department in Employee entity table then I get the result.
Can someone please help if I am missing anything?
Advertisement
Answer
Well taking help from above post. I made few other changes in my code. As I could not manage to remove the field completely from my entity class so I made it Transient and set its property from the join column object method. So my class are as follows.
Employee class is as follows.
package com.sl.ems.models;
import javax.persistence.*;
import java.math.BigInteger;
import java.util.Date;
@Entity
public class Employees {
/**
Author: Puneet Kumar Bahuguna
Year: DEC 2020
Project: SimplyLearn EMS
Description: This Entity class mapped to the employees table in the database.
**/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigInteger EMPID;
private String FIRSTNAME;
private String LASTNAME;
private Date DOB;
private String EMAIL;
@Transient
private BigInteger DEPARTMENT_ID;
@OneToOne
@JoinColumn(name = "DEPARTMENT_ID")
private Department department;
public Employees(){
}
public Employees(BigInteger EMPID){
this.EMPID=EMPID;
}
public Employees(String FIRSTNAME,String LASTNAME,Date DOB,String EMAIL,Department department){
this.FIRSTNAME=FIRSTNAME;
this.LASTNAME=LASTNAME;
this.DOB=DOB;
this.EMAIL=EMAIL;
this.department=department;
}
public BigInteger getEMPID() {
return EMPID;
}
public void setEMPID(BigInteger EMPID) {
this.EMPID = EMPID;
}
public String getFIRSTNAME() {
return FIRSTNAME;
}
public void setFIRSTNAME(String FIRSTNAME) {
this.FIRSTNAME = FIRSTNAME;
}
public String getLASTNAME() {
return LASTNAME;
}
public void setLASTNAME(String LASTNAME) {
this.LASTNAME = LASTNAME;
}
public Date getDOB() {
return DOB;
}
public void setDOB(Date DOB) {
this.DOB = DOB;
}
public String getEMAIL() {
return EMAIL;
}
public void setEMAIL(String EMAIL) {
this.EMAIL = EMAIL;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public void setDEPARTMENT_ID(BigInteger DEPARTMENT_ID) {
this.DEPARTMENT_ID = DEPARTMENT_ID;
}
public BigInteger getDEPARTMENT_ID() {
return DEPARTMENT_ID;
}
}
StatusReport class is as follows.
package com.sl.ems.models;
import javax.persistence.*;
import java.math.BigInteger;
import java.util.Date;
@Entity
@Table(name="statusreport")
public class StatusReport {
/**
Author: Puneet Kumar Bahuguna
Year: DEC 2020
Project: SimplyLearn EMS
Description: This Entity class mapped to the statusreport table in the database.
**/
private BigInteger COMPLIANCEID;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigInteger STATUSRPTID;
private String COMMENTS;
private Date CREATEDDATE;
private BigInteger DEPARTMENT_ID;
@Transient
private BigInteger EMPID;
@OneToOne
@JoinColumn(name = "EMPID")
private Employees employee;
public StatusReport(){
}
public StatusReport(String COMMENTS,Date CREATEDDATE){
}
public StatusReport(BigInteger COMPLIANCEID,String COMMENTS,Date CREATEDDATE,
BigInteger DEPARTMENT_ID,Employees employee){
this.COMPLIANCEID=COMPLIANCEID;
this.COMMENTS=COMMENTS;
this.CREATEDDATE=CREATEDDATE;
this.DEPARTMENT_ID=DEPARTMENT_ID;
this.employee=employee;
}
public BigInteger getCOMPLIANCEID() {
return COMPLIANCEID;
}
public void setCOMPLIANCEID(BigInteger COMPLIANCEID) {
this.COMPLIANCEID = COMPLIANCEID;
}
public void setEMPID(BigInteger EMPID) {
this.EMPID = EMPID;
}
public BigInteger getEMPID() {
return EMPID;
}
public BigInteger getSTATUSRPTID() {
return STATUSRPTID;
}
public void setSTATUSRPTID(BigInteger STATUSRPTID) {
this.STATUSRPTID = STATUSRPTID;
}
public String getCOMMENTS() {
return COMMENTS;
}
public void setCOMMENTS(String COMMENTS) {
this.COMMENTS = COMMENTS;
}
public Date getCREATEDDATE() {
return CREATEDDATE;
}
public void setCREATEDDATE(Date CREATEDDATE) {
this.CREATEDDATE = CREATEDDATE;
}
public BigInteger getDEPARTMENT_ID() {
return DEPARTMENT_ID;
}
public void setDEPARTMENT_ID(BigInteger DEPARTMENT_ID) {
this.DEPARTMENT_ID = DEPARTMENT_ID;
}
public Employees getEmployee() {
return employee;
}
public void setEmployee(Employees employee) {
this.employee = employee;
}
}
Please also note for example while you are saving a StatusReport object by using save method of jpa you will have to set the EMPID through getEmployee().getEMPID()