एक अज्ञात लक्ष्य इकाई संपत्ति के संदर्भ में मैप किया गया


85

मुझे अपनी एनोटेट ऑब्जेक्ट में एक से कई संबंधों को स्थापित करने में समस्या हो रही है।

मेरे पास निम्नलिखित हैं:

@MappedSuperclass
public abstract class MappedModel
{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id",nullable=false,unique=true)
    private Long mId;

फिर यह

@Entity
@Table(name="customer")
public class Customer extends MappedModel implements Serializable
{

    /**
   * 
   */
  private static final long serialVersionUID = -2543425088717298236L;


  /** The collection of stores. */
    @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  private Collection<Store> stores;

और इस

@Entity
@Table(name="store")
public class Store extends MappedModel implements Serializable
{

    /**
   * 
   */
  private static final long serialVersionUID = -9017650847571487336L;

  /** many stores have a single customer **/
  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn (name="customer_id",referencedColumnName="id",nullable=false,unique=true)
  private Customer mCustomer;

मैं यहाँ क्या गलत कर रहा हूँ

जवाबों:


148

mappedByविशेषता संदर्भित कर रहा है customer, जबकि संपत्ति है mCustomer, इसलिए त्रुटि संदेश। इसलिए या तो अपनी मैपिंग को इसमें बदलें:

/** The collection of stores. */
@OneToMany(mappedBy = "mCustomer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<Store> stores;

या इकाई की संपत्ति को customer(जो मैं करूँगा) में बदल दें।

मैप किए गए संदर्भ से संकेत मिलता है कि "उस चीज़ पर 'ग्राहक' नाम की सेम संपत्ति पर जाएं जो मेरे पास कॉन्फ़िगरेशन खोजने के लिए संग्रह है।"


काम किया है, मुझे उम्मीद थी कि यह प्रतिबिंब का उपयोग करने के लिए सेटर या गेट्टर विधि का उपयोग करेगा और सीधे संपत्ति नहीं।
3:47 बजे बॉयड 4715

@ boyd4715: आप प्रॉपर्टी एक्सेस (बनाम फ़ील्ड एक्सेस) का उपयोग करते समय यह देखने के लिए अपने एनोटेशन को गेटर्स पर ले जाने की कोशिश कर सकते हैं। दूसरी ओर, javadoc का mappedByकहना है कि क्षेत्र जो कि रिश्ते का मालिक है, इसलिए मुझे यकीन नहीं है कि यह कुछ भी बदल देगा।
पास्कल थिवेंट

धन्यवाद जो मेरी बहुत मदद करते हैं
ओसामा अल-बन्ना

9

मुझे पता है कि @ पास्कल थिवेंट के जवाब से समस्या हल हो गई है। मैं दूसरों को उनके उत्तर के लिए थोड़ा और जोड़ना चाहूंगा जो इस धागे को सर्फ कर सकते हैं।

यदि आप also ’संपत्ति के @OneToManyसाथ एनोटेशन का उपयोग करने की अवधारणा के आसपास अपने सिर को सीखने और लपेटने के शुरुआती दिनों में मेरे जैसे mappedByहैं, तो इसका मतलब यह भी है कि दूसरे पक्ष ने @ManyToOneएनोटेशन को अपने पास रखा है।@JoinColumn इस बाय-डायरेक्शनल के मालिक के रिश्ते।

इसके अलावा, एक इनपुट के रूप में वर्ग चर mappedByके उदाहरण नाम ( mCustomerइस उदाहरण में) लेता है और वर्ग-प्रकार (पूर्व: ग्राहक) या इकाई नाम (उदा: ग्राहक) नहीं।

बोनस: इसके अलावा, एनोटेशन की orphanRemovalसंपत्ति में देखें @OneToMany। यदि यह सच है, तो यदि द्वि-दिशात्मक संबंध में माता-पिता को हटा दिया जाता है, तो हाइबरनेट स्वचालित रूप से बच्चों को हटा देता है।


0
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "USER_ID")
    Long userId;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "sender", cascade = CascadeType.ALL)
    List<Notification> sender;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "receiver", cascade = CascadeType.ALL)
    List<Notification> receiver;
}

public class Notification implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id

    @Column(name = "NOTIFICATION_ID")
    Long notificationId;

    @Column(name = "TEXT")
    String text;

    @Column(name = "ALERT_STATUS")
    @Enumerated(EnumType.STRING)
    AlertStatus alertStatus = AlertStatus.NEW;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "SENDER_ID")
    @JsonIgnore
    User sender;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "RECEIVER_ID")
    @JsonIgnore
    User receiver;
}

मैं जवाब से क्या समझा। mappedy = "प्रेषक" मान अधिसूचना मॉडल में समान होना चाहिए। मैं आपको एक उदाहरण देता हूँ..

उपयोगकर्ता मॉडल:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "**sender**", cascade = CascadeType.ALL)
    List<Notification> sender;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "**receiver**", cascade = CascadeType.ALL)
    List<Notification> receiver;

अधिसूचना मॉडल:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "sender", cascade = CascadeType.ALL)
    List<Notification> **sender**;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "receiver", cascade = CascadeType.ALL)
    List<Notification> **receiver**;

मैंने उपयोगकर्ता मॉडल और सूचना क्षेत्र को बोल्ड फ़ॉन्ट दिया। उपयोगकर्ता मॉडल मैप किया गया = " प्रेषक " अधिसूचना सूची प्रेषक के बराबर होना चाहिए ; और मैप किया गया = " रिसीवर " अधिसूचना रिसीवर के बराबर होना चाहिए ; यदि नहीं, तो आपको त्रुटि मिलेगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.