title: How do I join tables on non-primary key columns?
body: <p>I have an issue with join tables on an object in an ORM class hierarchy where the join column is NOT the primary key of the base class due a lagacy database structure. 
  Here is an example of the table design:</p>
  
  <pre><code>CREATE TABLE "SCH"."FOO"
  (
          "OWNERID"       NUMBER(10,0) NOT NULL ENABLE,
          "FOOID"         NUMBER(10,0) NOT NULL ENABLE,
          CONSTRAINT "FOO_PK" PRIMARY KEY ("OWNERID", "FOOID")
          CONSTRAINT "FOO_FK1" FOREIGN KEY ("OWNERID") REFERENCES "SCH"."OWNERS" ("OWNERID") ENABLE
  )
  
  CREATE TABLE "SCH"."BAR"
  (
          "BARID"             NUMBER(10,0) NOT NULL ENABLE,
          "FOOID"             NUMBER(10,0)
          CONSTRAINT "BAR_PK" PRIMARY KEY ("BARID")
  )
  </code></pre>
  
  <p>And here are the mappings (unesessary infomation removed)</p>
  
  <pre><code>@Entity
  @IdClass(FooId.class)
  @Table(name = "FOO")
  public class Foo implements java.io.Serializable
  {
      @Id
      @Column(name = "OWNERID")
      private BigInteger ownerId;
  
      @Id
      @SequenceGenerator(name = "FOO_GENERATOR", sequenceName = "SEQ_FOO")
      @GeneratedValue(generator = "FOO_GENERATOR")
      @Column(name = "FOOID")
      private BigInteger id;
  
      @OneToMany(fetch = FetchType.LAZY)
      @JoinColumn(name = "FOOID", referencedColumnName = "FOOID")
      @Fetch(value = FetchMode.SUBSELECT)
      @Cascade(value = {CascadeType.ALL})
      private Set&lt;Bar&gt; bar = new LinkedHashSet&lt;Bar&gt;(0);
  }
  
  
  @Entity
  @Table(name = "BAR")
  public class Bar implements java.io.Serializable
  {
      @Id
      @Column(name = "BARID")
      private BigInteger id;
  
      @ManyToOne(fetch = FetchType.LAZY)
      @JoinColumn(name = "FOOID", referencedColumnName = "FOOID")
      private Foo foo;
  }
  </code></pre>
  
  <p>This fails with an exception:</p>
  
  <pre><code>Caused by: org.hibernate.AnnotationException: referencedColumnNames(FOOID) of com.package.Bar.foo referencing com.package.Foo not mapped to a single property
      at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:204)
      at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:114)
      at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1580)
      at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1503)
      at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1419)
      at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375)
  </code></pre>
  
  <p>Could you please help with a solution?</p>