2012-03-29 27 views
29

क्या कोई मुझे हाइबरनेट में @MapsId समझा सकता है? मुझे समझ में मुश्किल हो रही है।क्या कोई मुझे हाइबरनेट में @MapsId समझा सकता है?

यह अच्छा होगा अगर कोई इसे उदाहरण के साथ समझा सकता है और किस प्रकार के उपयोग मामलों में यह सबसे अधिक लागू है?

उत्तर

19

यहां Object DB से एक अच्छा स्पष्टीकरण है।

एक ManyToOne या OneToOne संबंध विशेषता है कि एक EmbeddedId प्राथमिक कुंजी, एक EmbeddedId प्राथमिक कुंजी के भीतर एक विशेषता, या मूल इकाई का एक सरल प्राथमिक कुंजी के लिए मानचित्रण प्रदान करता है निर्दिष्ट करता है। मान तत्व एक समग्र कुंजी के भीतर विशेषता निर्दिष्ट करता है जिसमें संबंध विशेषता मेल खाता है। यदि इकाई की प्राथमिक कुंजी रिश्ते द्वारा संदर्भित इकाई की प्राथमिक कुंजी के समान जावा प्रकार का है, तो मान विशेषता निर्दिष्ट नहीं है।

// parent entity has simple primary key 

@Entity 
public class Employee { 
    @Id long empId; 
    String name; 
    ... 
} 

// dependent entity uses EmbeddedId for composite key 

@Embeddable 
public class DependentId { 
    String name; 
    long empid; // corresponds to primary key type of Employee 
} 

@Entity 
public class Dependent { 
    @EmbeddedId DependentId id; 
    ... 
    @MapsId("empid") // maps the empid attribute of embedded id 
    @ManyToOne Employee emp; 
} 

यहाँ API Docs पढ़ें।

1

मुझे यह नोट भी उपयोगी पाया: @MapsId हाइबरनेट एनोटेशन मानचित्र में किसी अन्य तालिका के कॉलम के साथ एक कॉलम मानचित्र।

इसका उपयोग उसी प्राथमिक कुंजी को 2 टेबल के बीच साझा करने के लिए भी किया जा सकता है।

उदाहरण:

@Entity 
@Table(name = "TRANSACTION_CANCEL") 
public class CancelledTransaction { 
    @Id 
    private Long id; // the value in this pk will be the same as the 
        // transaction line from transaction table to which 
        // this cancelled transaction is related 

    @OneToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "ID_TRANSACTION", nullable = false) 
    @MapsId 
    private Transaction transaction; 
    .... 
} 

@Entity 
@Table(name = "TRANSACTION") 
@SequenceGenerator(name = "SQ_TRAN_ID", sequenceName = "SQ_TRAN_ID") 
public class Transaction { 
    @Id 
    @GeneratedValue(generator = "SQ_TRAN_ID", strategy = GenerationType.SEQUENCE) 
    @Column(name = "ID_TRANSACTION", nullable = false) 
    private Long id; 
    ... 
}