मैं विदेशी कुंजी संदर्भ के साथ दो तालिकाओं है:लापता पंक्तियों
Comm TABLE:
+----+------------+
| ID | NAME |
+----+------------+
| 1 | comm name1 |
| 2 | comm name2 |
| 3 | comm name3 |
+----+------------+
LOCATION TABLE: - COMM_ID FK to Comm --> id
+---------+------+-----+
| COMM_ID | FORM | TO |
+---------+------+-----+
| 1 | 720 | 721 |
| 1 | 725 | |
| 1 | | 766 |
| 1 | | |
| 2 | 766 | 225 |
| 3 | 766 | 222 |
+---------+------+-----+
समस्या हाइबरनेट SET<location>
सभी पंक्तियों में location
लापता जहां कोई FROM
के साथ मेरी कॉम वस्तु देता है औरTO
(तालिका LOCATION में COMM_ID = 1 के साथ अंतिम पंक्ति की तरह) गायब हैं।
अन्यथा (अगर FROM
या TO
में से केवल एक) पंक्ति वापस आती है ... क्यों?
Comm
वस्तुओं:
@ElementCollection
@CollectionTable(name="LOCATION",[email protected](name="COMM_ID"))
public Set<LOCATION> getLocations(){
return locations;
}
public void setLocations(Set<LOCATION> locations){
this.locations=locations;
}
Location
वर्ग:
@Embeddable
class Location implements java.io.Serializable {
private BigDecimal fromLocationId;
private BigDecimal toLocationId;
public Location() {
}
public Location(BigDecimal fromLocationId, BigDecimal toLocationId) {
this.fromLocationId = fromLocationId;
this.toLocationId = toLocationId;
}
@Column(name="FROM", nullable=true, precision=22, scale=0)
public BigDecimal getFromLocationId() {
return this.fromLocationId;
}
public void setFromLocationId(BigDecimal fromLocationId) {
this.fromLocationId = fromLocationId;
}
@Column(name="TO", nullable=true, precision=22, scale=0)
public BigDecimal getToLocationId() {
return this.toLocationId;
}
public void setToLocationId(BigDecimal toLocationId) {
this.toLocationId = toLocationId;
}
@Override
public int hashCode() {
return com.google.common.base.Objects.hashCode(fromLocationId, toLocationId);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
final LOCATION other = (LOCATION) obj;
return com.google.common.base.Objects.equal(this.fromLocationId, other.fromLocationId) && com.google.common.base.Objects.equal(this.toLocationId, other.toLocationId);
}
}
मैं हाइबरनेट उपयोग कर रहा हूँ - 4.3.6
लॉग इन करें:
org.hibernate.SQL -
select
locations0_.COMM_ID as COMM_ID1_2_0_,
locations0_.FROM as FROM2_8_0_,
locations0_.TO as TO4_8_0_
from
LOCATION locations0_
where
locations0_.COMM_ID=1
मैंने इसे अपने डीबी में चेक किया और यह सही परिणाम देता है।
क्या मुझे कुछ याद आ रही है? आपका डेटा स्ट्रिंग्स से होने और दिखाने के लिए दिखाता है, लेकिन आप मैपिंग कहते हैं कि उन्हें संख्याएं होनी चाहिए ???? –
क्षमा करें मैं इसे ठीक करता हूं .. – user986474
कृपया संपूर्ण 'LOCATION' कक्षा पोस्ट करें। चूंकि आप 'सेट' का उपयोग कर रहे हैं, इसलिए यह अनिवार्य है कि आप 'बराबर' और 'हैशकोड' विधि को सही तरीके से ओवरराइड करते हैं। – Tom