@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Problem {
@ManyToOne
private Person person;
}
@Entity
@DiscriminatorValue("UP")
public class UglyProblem extends Problem {}
@Entity
public class Person {
@OneToMany(mappedBy="person")
private List<UglyProblem> problems;
}
में विरासत के साथ काम नहीं करता है, मुझे लगता है कि यह स्पष्ट है कि मैं क्या करने की कोशिश कर रहा हूं। मैं @ManyToOne व्यक्ति को UglyProblem कक्षा द्वारा विरासत में रहने की उम्मीद करता हूं। लेकिन कुछ ऐसा कहने का अपवाद होगा: "ऐसी कोई संपत्ति ऐसी नहीं है जो UglyProblem क्लास (mappedBy =" person ") में पाई गई है।क्यों @OneToMany Hibernate
मुझे मिला सभी this है। मैं इमानुअल बर्नार्ड द्वारा इस पोस्ट के कारणों को समझाते हुए पोस्ट नहीं ढूंढ पाया।
दुर्भाग्य से, हाइबरनेट प्रलेखन के अनुसार, "सुपर-क्लास से गुण मैप नहीं के रूप में @MappedSuperclass अनदेखी कर रहे हैं।"
public class A { private int foo; } @Entity public class B extens A { }
तो क्षेत्ररक्षण
foo
वर्ग बी कौन सा समझ में आता है के लिए मैप नहीं किया जाएगा:
खैर मैं इसका मतलब है कि अगर मैं इन दो वर्गों है लगता है। लेकिन अगर मैं कुछ इस तरह है: मैं कक्षा UglyProblem फ़ील्ड id
और name
और दोनों वर्गों में एक ही तालिका का उपयोग मैप किया जा करने के लिए उम्मीद
@Entity
public class Problem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
public class UglyProblem extends Problem {
private int levelOfUgliness;
public int getLevelOfUgliness() {
return levelOfUgliness;
}
public void setLevelOfUgliness(int levelOfUgliness) {
this.levelOfUgliness = levelOfUgliness;
}
}
। (वास्तव में, यह वही होता है जो मैंने किया है, मैंने अभी फिर से जांच की है)।
CREATE TABLE "problem" (
"DTYPE" varchar(31) NOT NULL,
"id" bigint(20) NOT NULL auto_increment,
"name" varchar(255) default NULL,
"levelOfUgliness" int(11) default NULL,
PRIMARY KEY ("id")
) AUTO_INCREMENT=2;
मेरे सवाल करने के लिए वापस जा रहे हैं::
मैं @ManyToOne व्यक्ति UglyProblem वर्ग द्वारा विरासत में मिला होने की उम्मीद मैं इस तालिका मिला है।
मुझे उम्मीद है कि अन्य सभी मैप किए गए फ़ील्ड विरासत में हैं और मुझे कई रिश्तों के लिए यह अपवाद बनाने का कोई कारण नहीं दिख रहा है।
हाँ, मैंने देखा। वास्तव में, मैंने अपने मामले के लिए केवल पढ़ने के लिए समाधान का उपयोग किया। लेकिन मेरा सवाल था "क्यों ..." :)। मुझे पता है कि हाइबरनेट टीम के एक सदस्य द्वारा दी गई एक स्पष्टीकरण है। मैं इसे खोजने में सक्षम नहीं था और इसलिए मैंने पूछा।
मैं इस डिजाइन निर्णय की प्रेरणा जानना चाहता हूं।
(यदि आप रुचि रखते हैं कि मुझे इस समस्या का सामना करना पड़ा है: मुझे हाइबरनेट 3 का उपयोग करके निर्मित एक परियोजना विरासत में मिली। यह जेबॉस 4.0 था। कुछ + हाइबरनेट पहले से ही था (आप इसे सभी एक साथ डाउनलोड करेंगे)। मैं इस प्रोजेक्ट को ले जा रहा था Jboss 4.2.2 और मुझे पता चला है कि वहाँ विरासत में मिला रहे की "@OneToMany mappedBy" मैपिंग और यह पुराने सेटअप पर ठीक काम किया ...)
आप 4 सितंबर को अपने संपादित के बारे में अधिक जानकारी के जोड़ने चाहिए:
क्या काम करता है, हालांकि बहुत साफ नहीं, @OneToMany संघ को हाइबरनेट मालिकाना @Where खंड जोड़ने के लिए क्वेरी में टाइप मजबूर करने के लिए है।केवल @OneToMany (mappedBy = "person") में सूची के बजाय सूची निर्दिष्ट करें, मैपिंग समस्या की प्रकृति को बदलती है, क्योंकि मुझे लगता है कि हमने पहले माना था कि आप समस्याओं की सूची में किसी व्यक्ति को मानचित्र बनाना चाहते हैं (Ugl –