-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Problem with composite foreign key
PostPosted: Tue Nov 25, 2014 9:59 pm 
Newbie

Joined: Sun Nov 19, 2006 6:55 pm
Posts: 9
I am getting this error :- org.hibernate.MappingException: Foreign key must have same number of columns as the referenced primary key

This error seems to be very common and many people seem to have gotten this error. But unfortunately my problem seems to be different from theirs. In my case it seems hibernate cannot find primary key as composite but rather it thinks there is only one column in primary key.

I have two entities :-

1.)DocWemPrimary.java - Master table having composite primary key on columns (doc_id,prod_stage).
2.)DocWemSecondary.java - Child table having composite primary key on columns (doc_id,prod_stage,file_name).

I have two primary key classes for each of the above entities.

1.)DocWemPrimaryId.java 2.)DocWemSecondaryId.java

Here are relevant definitions of above classes :- 1.)DocWemPrimary.java

Code:
@SuppressWarnings("serial")
@Entity
@Table(name = "DOC_WEM_PRIMARY")

public class DocWemPrimary {

@EmbeddedId
private DocWemPrimaryId docWemPrimaryId ;

@OneToMany(fetch=FetchType.LAZY,mappedBy="docId")
@Cascade({ CascadeType.SAVE_UPDATE, CascadeType.DELETE })
private Set<DocWemSecondary> docWemSecondary;
/**Other columns **/
}


2.)DocWemSecondary.java
Code:
@SuppressWarnings("serial")
@Entity
@Table(name = "DOC_WEM_SECONDARY")
@IdClass(DocWemSecondaryId.class)

public class DocWemSecondary {
@Id
  @ManyToOne(fetch=FetchType.LAZY)
  private DocWemPrimary docId ;

@Id
  @Column(name = "FILE_NAME" )
  private String fileName ;

}


3.)DocWemPrimaryId.java

Code:
@Embeddable
public class DocWemPrimaryId implements Serializable{

@Column(name = "DOC_ID",nullable=false)
private String docId ;

@Column(name = "PROD_STAGE",nullable=false)
private String prodStage ;
}


4.)DocWemSecondaryId.java

Code:
@Embeddable
public  class DocWemSecondaryId implements Serializable
{
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumns({
        @JoinColumn(name = "DOC_ID", referencedColumnName="DOC_ID" ,nullable = false,insertable=false, updatable=false),
        @JoinColumn(name = "PROD_STAGE", referencedColumnName="PROD_STAGE",nullable = false,insertable=false, updatable=false)})
    private DocWemPrimary docId ;

    @Column(name = "FILE_NAME", insertable=false, updatable=false)
    private String fileName ;

  }

The error message that I get is :-

org.hibernate.MappingException: Foreign key
(FK_l3fmo38mh9t2j69fpesabyegp:DOC_WEM_SECONDARY [DOC_ID,PROD_STAGE]))
must have same number of columns as the referenced primary key (DOC_WEM_PRIMARY [DOC_ID])
As you can see clearly , DocWemPrimary has two columns as primary key. Then why hibernate thinks it only has docId as primary key - that part has been very puzzling to me.

Thanks for your help.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.