2011-03-02 19 views
15

बनाता है मैं MVC, Roo वसंत और हाइबरनेट करने के लिए नए हूँ। एम संबंध:स्प्रिंग रू, हाइबरनेट, कई संबंध के लिए एक अतिरिक्त तालिका

मैं 1 के साथ दो तालिकाएं बनाने के लिए कोशिश कर रहा हूँ।

उदाहरण के लिए, मैं दो संस्थाओं, व्यक्ति और कार चाहते हैं। एक व्यक्ति के पास कई कारें हो सकती हैं।

मेरे द्वारा बनाए गए रू

entity --class ~.domain.Person 
field string Name 
entity --class ~.domain.Car 
field string Name 
field reference --fieldName owner --type ~.domain.Person 
field set --fieldName ownedCars --type ~.domain.Car --class ~.domain.Person --cardinality ONE_TO_MANY 
कार के लिए

जनरेट किया वर्ग का उपयोग कर संस्थाओं:

@RooJavaBean 
@RooToString 
@RooEntity 
public class Car { 

    private String Name; 

    @ManyToOne 
    private Person owner; 
} 

व्यक्ति लिए जेनरेट होने वर्ग

@RooJavaBean 
@RooToString 
@RooEntity 
public class Person { 

    private String Name; 

    @OneToMany(cascade = CascadeType.ALL) 
    private Set<Car> ownedCars = new HashSet<Car>(); 
} 

हालांकि, डेटाबेस में, वहाँ 3 रहे हैं टेबल

(दो के insted)

टेबल कार (अपेक्षित रूप से)

CREATE TABLE "TEST"."CAR" 
    ( 
    "ID" NUMBER(19,0), 
    "NAME" VARCHAR2(255 BYTE), 
    "VERSION" NUMBER(10,0), 
    "OWNER" NUMBER(19,0) 
    ) 

तालिका व्यक्ति (अपेक्षित रूप से)

CREATE TABLE "TEST"."PERSON" 
    (
"ID" NUMBER(19,0), 
    "NAME" VARCHAR2(255 BYTE), 
    "VERSION" NUMBER(10,0) 
    ) 

और भी PERSON_OWNED_CARS (जो की उम्मीद नहीं है, यह कई संबंध बनाने के लिए कई नहीं है)

CREATE TABLE "TEST"."PERSON_OWNED_CARS" 
    (
"PERSON" NUMBER(19,0), 
    "OWNED_CARS" NUMBER(19,0) 
    ) 

आखिरी तालिका क्यों उत्पन्न हुई है? आखिरी तालिका का उद्देश्य क्या है, यह कई रिश्तों के लिए बहुत कुछ नहीं है? क्या इससे बचा जा सकता है? क्या मुझसे कुछ गलत हो रही है?

उत्तर

20

मुझे यकीन है कि कैसे रू इस का प्रबंधन करता है नहीं कर रहा हूँ, लेकिन आप mappedBy साथ द्विदिश रिश्ते की तरफ से जोड़ने के लिए की जरूरत है:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") 
private Set<Car> ownedCars = new HashSet<Car>(); 

अन्यथा वे दो अलग अलग यूनिडायरेक्शनल रिश्तों के रूप में व्याख्या कर रहे हैं, और Person से Car के संबंध है जॉइन टेबल के माध्यम से कार्यान्वित किया गया (यह एक-दूसरे के कई रिश्तों के लिए एक डिफ़ॉल्ट व्यवहार है)।

+1

बहुत बढ़िया जवाब! धन्यवाद! – Emir

+5

इसे स्वयं से करने के लिए '- mappedBy स्वामी' विकल्प का उपयोग किया जा सकता है। सवाल-जवाब के लिए धन्यवाद! – xverges

+0

बहुत उपयोगी उत्तर, मैं टेबल पीढ़ी के व्यवहार के बारे में वास्तव में यहां खो गया था। –

संबंधित मुद्दे