title: One to many hibernate join if column names are different
body: <p>I have three tables with following structure - </p>
  
  <p>Contract  ->  contract_id(primary), customer_company_id, Vendor_company_id</p>
  
  <p>Company -> Company_id(primary), creation_date, created_by</p>
  
  <p>Company_Timeline  ->  Timeline_id(Primary), Company_id, Company_name.</p>
  
  <p>and have following classes for these tables -</p>
  
  <pre><code>Contract.java
  
  @Table(name = "CONTRACT")
  @Entity
  @SequenceGenerator(name = "ContractSeq", sequenceName = "SEQCONTRACT", allocationSize = 1)
  public class Contract implements Serializable {
  
      private static final long serialVersionUID = 1L;
  
      /*
       * General Tab
       */
      @Id
      @Column(name = "CONTRACT_ID")
      @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ContractSeq")
      private Integer id;
  
      /*
       * Customer Company Info
       */
  
      @ManyToOne(fetch = FetchType.LAZY)
      @JoinColumn(name = "CUSTOMER_COMPANY_ID", nullable = true ,insertable = false,updatable = false)
      @ForeignKey(name = "FK_CONTRACT_CUSTOMER_COMPANY_ID")
      private Company customerCompany;
  
      @ManyToOne(fetch = FetchType.EAGER)
      @JoinColumn(name = "VENDOR_COMPANY_ID", nullable = true ,insertable = false,updatable = false)
      @ForeignKey(name = "FK_CONTRACT_CVENDOR_COMPANY_ID")
      private Company vendorCompany;
  
      //What mapping should i do to get CUSTOMER_COMPANY_ID Timeline list here
  
  
      //What mapping should i do to get vendor_COMPANY_ID Timeline list here
  
  }
  
  Company.java
  
  @Entity
  @Table(name = "COMPANY")
  @SequenceGenerator(name="CompanySeq", sequenceName="SEQ_COMPANY", allocationSize=1)
  public class Company implements Serializable {
  
      private static final long serialVersionUID = 1L;
  
      /*
       * Customer Company Details 
       */
  
      @Id
      @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CompanySeq")
      @Column(name = "COMPANY_ID")
      private Integer id;
  
      @Column(name="CREATION_DATE")
      @Temporal(value=TemporalType.TIMESTAMP)
      private Date creationDate;
  
      @Column(name="CREATED_BY")
      private String createdBy;
  
      @OneToMany(fetch = FetchType.LAZY, orphanRemoval=true)
      @Cascade({org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
      @JoinColumn(name = "COMPANY_ID",nullable=false)
      @OrderBy(clause = "AS_OFF_DATE" )
      @ForeignKey(name = "PF_COMPANY_TIMELINE")     
      private List&lt;CompanyTimeline&gt; companyTimeline = new ArrayList&lt;CompanyTimeline&gt;();
  }
  
  CompanyTimeline.java
  
  @Entity
  @Table( name = "COMPANY_TIMELINE")
  @SequenceGenerator(name = "CompanyTimelineSeq", sequenceName = "COMPANY_TIMELINE_SEQUENCE")
  public class CompanyTimeline {
  
      @Id
      @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CompanyTimelineSeq")
      @Column(name = "COMPANY_EVENT_ID")
      private Integer eventId;
  
      @ManyToOne(fetch= FetchType.EAGER)
      @JoinColumn(name = "COMPANY_ID", updatable = false, insertable = false, nullable=false)
      @ForeignKey(name = "FK_COMPANY_ID", inverseName = "COMPANY_ID")
      private Company company;
  }
  </code></pre>
  
  <p>Now i want to do a mapping(One to Many) in contract table to get customer_company  and vendor_company timeline. </p>
  
  <p>But as join column name are not same, Contract table has column name as CUSTOMER_COMPANY_ID,  VENDOR_COMPANY_ID but CompanyTimeline class has column name as COMPANY_ID.</p>
  
  <p>I am bit confused how make this join mapping in Contract.java.</p>
  
  <p><strong>EDIT :</strong></p>
  
  <p>I want to map contract table with timeline on the basis of <code>contract.customer_company_id = timeline.company_id</code>. Something like..</p>
  
  <pre><code>@OneToMany(fetch = FetchType.EAGER)
  @JoinColumn(name="COMPANY_ID", referencedColumnName="CUSTOMER_COMPANY_ID")
  @Where(clause="to_date(SIGNING_DATE, 'DD-Mon-YY') &gt;= (CASE WHEN event_start_date is null THEN to_date('01-JAN-1901', 'DD-Mon-YYYY') else event_start_date END) AND to_date(SIGNING_DATE, 'DD-Mon-YY') &lt;= (CASE WHEN event_end_date is null THEN to_date('01-JAN-2101', 'DD-Mon-YYYY') else event_end_date END)")
  private List&lt;CompanyTimelineView&gt; customerCompanyTimelineView = new ArrayList&lt;CompanyTimelineView&gt;();
  </code></pre>
  
  <p>This is what i want to do in contract.java so that i can get timeline object directly without eager company.</p>