java - @JoinColumn क्या है और हाइबरनेट में इसका उपयोग कैसे किया जाता है




hibernate postgresql (3)

वाहन कोड में patient_id (उत्पन्न कॉलम जो एफके है) का कोई मूल्य नहीं है जब मैं अपना कोड चलाता हूं?

सभी @JoinColumn एक इकाई संघ या तत्व संग्रह में शामिल होने के लिए एक कॉलम निर्दिष्ट करना है। चूँकि आपने @JoinColumn को रोगी वर्ग की वस्तु के साथ जोड़ा है, इसीलिए रोगी की मेज पर विदेशी कुंजी बनाई जाती है।

अधिक जानकारी के लिए कृपया https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/JoinColumn.html देखें

मैं @ जॉइनकॉलेज के बारे में बहुत कुछ पढ़ रहा हूं लेकिन मुझे अभी भी इसके पीछे का विचार नहीं आया है।

रोगी की मेज

CREATE TABLE patient (
patient_id BIGINT NOT NULL,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
PRIMARY KEY(patient_id));

वाहन की मेज

CREATE TABLE vehicles (
patient_id BIGINT NOT NULL,
vehicle_id BIGINT NOT NULL,
vehicle_manufacturer VARCHAR(255),
PRIMARY KEY (vehicle_id),
CONSTRAINT patienthasmanyvehicle FOREIGN KEY(patient_id) REFERENCES patient(patient_id));

रोगी वर्ग

@OneToMany(mappedBy = "patient")
    private Collection<Vehicle> patientVehicles = new ArrayList<Vehicle>();

वाहन वर्ग

@ManyToOne
@JoinColumn(name="patient_id")
private Patient patient;

मैं इस बात पर असमंजस में हूँ कि व्हीकल क्लास पार्ट कैसे, क्या रिश्ता है

Vehicle Class ---- Entity
@JoinColumn(name="patient_id") ---- annotation
private Patient patient ----field

क्या यह कहता है; वाहन इकाई के पास एक रोगी के लिए विदेशी कुंजी है जिसका नाम patient_id है वाहन एंटिटी टेबल में patient_id को एक कॉलम के रूप में जोड़ें

JoinColumn का नाम पैरामीटर हमेशा एक विदेशी कुंजी या प्राथमिक कुंजी होना चाहिए ?

मैं इसे पढ़ रहा हूं लेकिन मैं अभी भी भ्रमित हूं। JPA JoinColumn बनाम मैप किया गया


जॉइन कॉलम @JoinColumn एनोटेशन के साथ घोषित किया जाता है जो @Column एनोटेशन जैसा दिखता है। इसका एक और पैरामीटर है जिसका नाम referencedColumnName है। यह पैरामीटर लक्षित इकाई में उस कॉलम की घोषणा करता है जिसका उपयोग जुड़ने के लिए किया जाएगा।

एक द्विदिश संबंध में, पक्षों में से एक (और केवल एक) को मालिक होना चाहिए: मालिक एसोसिएशन कॉलम (एस) अपडेट के लिए जिम्मेदार है। एक पक्ष को रिश्ते के लिए जिम्मेदार नहीं घोषित करने के लिए, विशेषता मैप का उपयोग किया जाता है। mappedBy मालिक पक्ष पर एसोसिएशन की संपत्ति के नाम को संदर्भित करता है।

यहाँ नमूना कोड है:

EntityOne : 
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "TEST_ID")
    private EntityTwo entityTwo;

EntityTwo : 
      // bi-directional many-to-one association to EntityOne Here TEST_ID is the Primary key
    @OneToMany(mappedBy = "entityTwo")
    private List<EntityOne> entityOne;

सम्मिलित तालिका के माध्यम से एक यूनिडायरेक्शनल एसोसिएशन

@Entity
class Patient {

    @OneToMany
    private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();

}

@Entity
class Vehicle {

}

एक जुड़ाव तालिका के माध्यम से एक द्विदिश संघ

@Entity
class Patient {

    @OneToMany
    private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();

}

@Entity
class Vehicle {

    @ManyToOne(fetch = FetchType.LAZY)
    private Patient patient;

}

एक विदेशी कुंजी के माध्यम से एक यूनिडायरेक्शनल एसोसिएशन

@Entity
class Patient {

    @OneToMany
    @JoinColumn
    private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();

}

@Entity
class Vehicle {

}

एक विदेशी कुंजी के माध्यम से एक द्विदिश संघ

@Entity
class Patient {

    @OneToMany(mappedBy = "patient")
    private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();

}

@Entity
class Vehicle {

    @ManyToOne(fetch = FetchType.LAZY)
    private Patient patient;

}

एक विदेशी कॉलम नाम विनिर्देश के साथ एक विदेशी कुंजी के माध्यम से एक द्विदिश संघ

@Entity
class Patient {

    @OneToMany(mappedBy = "patient")
    private Collection<Vehicle> vehicles = new ArrayList<Vehicle>();

}

@Entity
class Vehicle {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="patient_id")
    private Patient patient;

}

यह @JoinColumn का उपयोग करने का मूल शुरुआती बिंदु है।

यह सत्यापित करने के लिए कि विदेशी कुंजी ( Vehicle तालिका में patient_id ) वास्तव में रोगियों की तालिका में मैप की गई है, आप @JoinColumn(nullable = false) उपयोग कर सकते हैं

@Entity
class Vehicle {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="patient_id", nullable = false)
    private Patient patient

}




jpa