/ / हाइबरनेट मैपिंग में त्रुटि "एक विदेशी कुंजी को संदर्भित करने वाले कॉलम की गलत संख्या है। होना चाहिए 2 ”- जावा, स्प्रिंग, हाइबरनेट-मैपिंग, स्प्रिंग-डेटा-जेपीए, समग्र-प्राथमिक

हाइबरनेट मैपिंग में त्रुटि "एक विदेशी कुंजी रिफरिंग में कॉलम की गलत संख्या है। 2 होना चाहिए "- जावा, वसंत, हाइबरनेट-मैपिंग, वसंत-डेटा-जेपीए, समग्र-प्राथमिक-कुंजी

TRANSFORMATION एक समग्र प्राथमिक कुंजी रखने वाली मेज trans_id तथा version.
EXPRESSION तालिका में विदेशी कुंजी संदर्भ है trans_id केवल, यह doesn "टी एक है version स्तंभ।

JUnit के माध्यम से जब मैं बचाने की कोशिश करता हूं TRANSFORMATION, मैं नीचे त्रुटि हो रही है।

caused by: org.hibernate.AnnotationException: A Foreign key refering org.persistence.entity.Transformation from org.persistence.entity.Expression has the wrong number of column. should be 2
at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:420) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:117) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1560) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1481) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
...
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:250) ~[spring-test-4.0.2.RELEASE.jar:4.0.2.RELEASE]
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64) ~[spring-test-4.0.2.RELEASE.jar:4.0.2.RELEASE]
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) ~[spring-test-4.0.2.RELEASE.jar:4.0.2.RELEASE]
... 25 more

@Entity(name="Transformation")
@Table(name="Transformation")
public class Transformation extends BaseEntity implements Serializable{


private static final long serialVersionUID = 1L;

@EmbeddedId
private TransformationPK id;
/*@OneToMany(mappedBy="transformation")
private Set<Expression> expressions;*/

@OneToMany
@JoinColumn(name="TRANS_ID", nullable = false)
@Fetch(FetchMode.SUBSELECT)
private Set<Expression> expressions;
}

@Embeddable
public class TransformationPK implements Serializable{

private static final long serialVersionUID = 1L;

@Column(name="TRANS_ID")
private String transId;

@Column(name="VERSION", precision = 2, scale = 1)
private Double transVersion;

public TransformationPK() {
}
}


@Entity(name="EXPRESSION")
@Table(name="EXPRESSION")
public class Expression extends BaseEntity implements Serializable{


private static final long serialVersionUID = 1L;

@Id
@Column(name = "Expression_ID")
@GeneratedValue(strategy=GenerationType.AUTO)
private String expressionId;

@Column(name="TRANS_ID")
private String transId;

/*@ManyToOne
@JoinColumns ({
@JoinColumn(name = "TRANS_ID", insertable = false, updatable = false),
@JoinColumn(name = "VERSION", insertable = false, updatable = false)
})
private Transformation transformation;*/

@ManyToOne
@JoinColumn(name = "TRANS_ID", nullable = false, insertable = false, updatable = false)
private Transformation transformation;
}

क्या कोई सुझाव दे सकता है कि इसे कैसे हल किया जाए।

उत्तर:

जवाब के लिए 3 № 1

जैसा कि आपके एम्बेड किए गए PK में दो कॉलम हैं, यहाँ आपको दो जॉइनिंग कॉलम भी होने चाहिए:

@ManyToOne
@JoinColumns({
@JoinColumn(name = "TRANS_ID", nullable = false, insertable = false, updatable = false),
@JoinColumn(name = "VERSION", ....
})
private Transformation transformation;

BTW, आपके पास द्विदिश संघ परिवर्तन-अभिव्यक्ति है, आपको एक छोर पर मैप्डबी जोड़ना चाहिए।