Hi Everyone, Many days I have been looking through many forums to clarify my doubts but never posted a query. This is my first introduction to a forum. Please help me in solving the below issue.
Following are the table structure
CREATE TABLE CU_LOOKUP_LIST ( LOOKUP_LIST_ID CHAR(20) NOT NULL, COUNTRY_CD CHAR(2) NOT NULL, LIST_TYPE_CD VARCHAR(7) NOT NULL, LIST_DSC VARCHAR(50) NOT NULL, CREATED_USR_ID CHAR(7) NOT NULL, CREATED_DTE TIMESTAMP NOT NULL, MOIDIFIED_USR_ID CHAR(7) , MODIFIED_DTE TIMESTAMP ); CREATE TABLE CU_LOOKUP_LIST_VALUE ( LIST_ID CHAR(9) NOT NULL, LOOKUP_KEY VARCHAR(50) NOT NULL, LOOKUP_VALUE VARCHAR(160) NOT NULL, DATA_ELEMNT_NAM VARCHAR(50) NOT NULL, ENV_NAM VARCHAR(10) NOT NULL, COUNTRY_CD CHAR(2) NOT NULL, CREATED_USR_ID CHAR(7) NOT NULL, CREATED_DTE TIMESTAPM NOT NULL, MODIFIED_USE_ID CHAR(7) , MODIFIED_DTE TIMESTAMP ); Note: One LookupList has multiple LookupListValue entries. Following are the entity mappings CU_LOOKUP_LIST: @Id @GeneratedValue @Column(name="LOOKUP_LIST_ID", unique= true, nullable=false, length=9) public String getLookupListId() { return this.lookupListId; }
public void setLookupListId(String lookupListId) { this.lookupListId = lookupListId; }
@Column(name="COUNTRY_CD", nullable=false, length=2) public String getCountryCd() { return this.countryCd; }
public void setCountryCd(String countryCd) { this.countryCd = countryCd; }
@Column(name="CREATED_DTE", nullable=false) public Date getCreatedDte() { return this.createdDte; }
public void setCreatedDte(Date createdDte) { this.createdDte = createdDte; }
@Column(name="CREATED_USR_ID", nullable=false, length=7) public String getCreatedUsrId() { return this.createdUsrId; }
public void setCreatedUsrId(String createdUsrId) { this.createdUsrId = createdUsrId; }
@Column(name="LIST_DSC", nullable=false, length=50) public String getListDsc() { return this.listDsc; }
public void setListDsc(String listDsc) { this.listDsc = listDsc; }
@Column(name="LIST_TYPE_CD", nullable=false, length=7) public String getListTypeCd() { return this.listTypeCd; }
public void setListTypeCd(String listTypeCd) { this.listTypeCd = listTypeCd; }
@Column(name="MODIFIED_DTE") public Date getModifiedDte() { return this.modifiedDte; }
public void setModifiedDte(Date modifiedDte) { this.modifiedDte = modifiedDte; }
@Column(name="MODIFIED_USR_ID", length=7) public String getMoidifiedUsrId() { return this.modifiedUsrId; }
public void setMoidifiedUsrId(String moidifiedUsrId) { this.modifiedUsrId = moidifiedUsrId; } @OneToMany(fetch=FetchType.EAGER, mappedBy="cuLookupList", cascade=CascadeType.ALL) public Set<CuLookupListValue> getCuLookupListValue() { return this.cuLookupListValue; }
public void setCuLookupListValue(Set<CuLookupListValue> cuLookupListValue) { this.cuLookupListValue = cuLookupListValue; }
CU_LOOKUP_LIST_VALUE: @Id @GeneratedValue @Column(name="LIST_ID", unique=false, nullable=false) public String getLookupListId(){ return this.lookupListId; } public void setLookupListId(String lookupListId){ this.lookupListId = lookupListId; } @Column(name="COUNTRY_CD", nullable=false, length=2) public String getCountryCd() { return this.countryCd; }
public void setCountryCd(String countryCd) { this.countryCd = countryCd; }
@Column(name="CREATED_DTE", nullable=false) public Date getCreatedDte() { return this.createdDte; }
public void setCreatedDte(Date createdDte) { this.createdDte = createdDte; }
@Column(name="CREATED_USR_ID", nullable=false, length=7) public String getCreatedUsrId() { return this.createdUsrId; }
public void setCreatedUsrId(String createdUsrId) { this.createdUsrId = createdUsrId; }
@Column(name="DATA_ELEMNT_NAM", nullable=false, length=50) public String getDataElemntNam() { return this.dataElemntNam; }
public void setDataElemntNam(String dataElemntNam) { this.dataElemntNam = dataElemntNam; }
@Column(name="ENV_NAM", nullable=false, length=10) public String getEnvNam() { return this.envNam; }
public void setEnvNam(String envNam) { this.envNam = envNam; }
@Column(name="LOOKUP_KEY", nullable=false, length=50) public String getLookupKey() { return this.lookupKey; }
public void setLookupKey(String lookupKey) { this.lookupKey = lookupKey; }
@Column(name="LOOKUP_VALUE", nullable=false, length=160) public String getLookupValue() { return this.lookupValue; }
public void setLookupValue(String lookupValue) { this.lookupValue = lookupValue; }
@Column(name="MODIFIED_DTE") public Date getModifiedDte() { return this.modifiedDte; }
public void setModifiedDte(Date modifiedDte) { this.modifiedDte = modifiedDte; }
@Column(name="MODIFIED_USR_ID", length=7) public String getModifiedUseId() { return this.modifiedUseId; }
public void setModifiedUseId(String modifiedUseId) { this.modifiedUseId = modifiedUseId; }
@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER) @JoinColumn(name="LIST_ID", nullable=false, insertable=false, updatable=false) public CuLookupList getCuLookupList() { return cuLookupList; }
public void setCuLookupList(CuLookupList cuLookupList) { this.cuLookupList = cuLookupList; }
When hitting the CU_LOOKUP_LIST(Parent Table) with listTypeCd as where condition, Hibernate internally performs to db hits.Following are the HQL Queries
PARENT TABLE QUERY: select C.LOOKUP_LIST_ID as LOOKUP1_1571_, C.COUNTRY_CD as COUNTRY2_1571_, C.CREATED_DTE as CREATED3_1571_, C.CREATED_USR_ID as CREATED4_1571_, C.LIST_DSC as LIST5_1571_, C.LIST_TYPE_CD as LIST6_1571_, C.MODIFIED_DTE as MODIFIED7_1571_, C.MODIFIED_USR_ID as MODIFIED8_1571_ from ID2XGCUD.CU_LOOKUP_LIST C where C.LIST_TYPE_CD=?
CHILD TABLE QUERY: select C.LIST_ID as LIST1_1_, C.LIST_ID as LIST1_1572_0_, C.COUNTRY_CD as COUNTRY2_1572_0_, C.CREATED_DTE as CREATED3_1572_0_, C.CREATED_USR_ID as CREATED4_1572_0_, C.DATA_ELEMNT_NAM as DATA5_1572_0_, C.ENV_NAM as ENV6_1572_0_, C.LOOKUP_KEY as LOOKUP7_1572_0_, C.LOOKUP_VALUE as LOOKUP8_1572_0_, C.MODIFIED_DTE as MODIFIED9_1572_0_, C.MODIFIED_USR_ID as MODIFIED10_1572_0_ from ID2XGCUD.CU_LOOKUP_LIST_VALUE C where C.LIST_ID=?
Issue : I have one record in parent table with ID=100 and 2 records in child table with the same id as 100. When hibernate retrieves the records of child table, its a persistentBag with size as 2. But the actual problem here is that, both the 2 objects are of first entry in child table. Duplicate record is present. Please help me in solving this issue. Let me know if I need to be clear anywhere or if any more details are required.
|