title: org.hibernate.AnnotationException: Referenced property not a (One|Many)ToOne:
body: <p>I'm trying to set up a OneToOne relationship using Hibernate. I've tried doing what the other questions suggest, but I'm still getting issues.</p>
  
  <p>I have a Company class that has its own set of Warehouse Rules. Each entity has a BusinessUnitNumber as the Id of the table.</p>
  
  <pre><code>@Entity(name="COBUSMST")
  public class Company implements Serializable{
      private static final long serialVersionUID = 2573441991172174342L;
      private Integer businessUnit;
      private String longName;
      private String shortName;
      private String address1;
      private String address2;
      private String city;
      private String state;
      private String zipCode;
      private String returnAddress1;
      private String returnAddress2;
      private String returnCity;
      private String returnState;
      private String returnZipCode;
      private int phoneNumber;
      private int areaCode;
      private boolean replacementCharge;
      private BigDecimal replacementChargeAmount;
      private String customerServiceKeycode;
      private BigDecimal restockPercent;
      private Integer enterpriseId;
      private String country;
      private String returnCountry;
      private int phoneExtension;
      private String phoneType;
      private String giftCardItemNumber;
      private boolean implementationStatus;
      private int defaultWebsiteId;
      private BigDecimal callTagFee;
  
      @OneToOne
      @JoinColumn(name="BUSUNTNBR")
      private WarehouseRules warehouseRules;
  
      /**
       * @return the businessUnit
       */
      @Id
      @Column(name="BUSUNTNBR")
      public Integer getBusinessUnit() {
          return businessUnit;
      }
      /**
       * @param businessUnit the businessUnit to set
       */
      public void setBusinessUnit(Integer businessUnit) {
          this.businessUnit = businessUnit;
      }
      /**
       * @return the longName
       */
      @Column(name="LNGNAM")
      public String getLongName() {
          return longName;
      }
      /**
       * @param longName the longName to set
       */
      public void setLongName(String longName) {
          this.longName = longName;
      }
      /**
       * @return the shortName
       */
      @Column(name="SRTNAM")
      public String getShortName() {
          return shortName;
      }
      /**
       * @param shortName the shortName to set
       */
      public void setShortName(String shortName) {
          this.shortName = shortName;
      }
      /**
       * @return the address1
       */
      @Column(name="ADR1")
      public String getAddress1() {
          return address1;
      }
      /**
       * @param address1 the address1 to set
       */
      public void setAddress1(String address1) {
          this.address1 = address1;
      }
      /**
       * @return the address2
       */
      @Column(name="ADR2")
      public String getAddress2() {
          return address2;
      }
      /**
       * @param address2 the address2 to set
       */
      public void setAddress2(String address2) {
          this.address2 = address2;
      }
      /**
       * @return the city
       */
      @Column(name="CTY")
      public String getCity() {
          return city;
      }
      /**
       * @param city the city to set
       */
      public void setCity(String city) {
          this.city = city;
      }
      /**
       * @return the state
       */
      @Column(name="STA")
      public String getState() {
          return state;
      }
      /**
       * @param state the state to set
       */
      public void setState(String state) {
          this.state = state;
      }
      /**
       * @return the zipCode
       */
      @Column(name="PSTCOD")
      public String getZipCode() {
          return zipCode;
      }
      /**
       * @param zipCode the zipCode to set
       */
      public void setZipCode(String zipCode) {
          this.zipCode = zipCode;
      }
      /**
       * @return the returnAddress1
       */
      @Column(name="RTNADR1")
      public String getReturnAddress1() {
          return returnAddress1;
      }
      /**
       * @param returnAddress1 the returnAddress1 to set
       */
      public void setReturnAddress1(String returnAddress1) {
          this.returnAddress1 = returnAddress1;
      }
      /**
       * @return the returnAddress2
       */
      @Column(name="RTNADR2")
      public String getReturnAddress2() {
          return returnAddress2;
      }
      /**
       * @param returnAddress2 the returnAddress2 to set
       */
      public void setReturnAddress2(String returnAddress2) {
          this.returnAddress2 = returnAddress2;
      }
      /**
       * @return the returnCity
       */
      @Column(name="RTNCTY")
      public String getReturnCity() {
          return returnCity;
      }
      /**
       * @param returnCity the returnCity to set
       */
      public void setReturnCity(String returnCity) {
          this.returnCity = returnCity;
      }
      /**
       * @return the returnState
       */
      @Column(name="RTNSTA")
      public String getReturnState() {
          return returnState;
      }
      /**
       * @param returnState the returnState to set
       */
      public void setReturnState(String returnState) {
          this.returnState = returnState;
      }
      /**
       * @return the returnZipCode
       */
      @Column(name="RTNPSTCOD")
      public String getReturnZipCode() {
          return returnZipCode;
      }
      /**
       * @param returnZipCode the returnZipCode to set
       */
      public void setReturnZipCode(String returnZipCode) {
          this.returnZipCode = returnZipCode;
      }
      /**
       * @return the phoneNumber
       */
      @Column(name="PHNNUM")
      public int getPhoneNumber() {
          return phoneNumber;
      }
      /**
       * @param phoneNumber the phoneNumber to set
       */
      public void setPhoneNumber(int phoneNumber) {
          this.phoneNumber = phoneNumber;
      }
      /**
       * @return the areaCode
       */
      @Column(name="ARACOD")
      public int getAreaCode() {
          return areaCode;
      }
      /**
       * @param areaCode the areaCode to set
       */
      public void setAreaCode(int areaCode) {
          this.areaCode = areaCode;
      }
      /**
       * @return the replacementCharge
       */
      @Column(name="RPLCHRFLG")
      @Type(type="yes_no")
      public boolean isReplacementCharge() {
          return replacementCharge;
      }
      /**
       * @param replacementCharge the replacementCharge to set
       */
      public void setReplacementCharge(boolean replacementCharge) {
          this.replacementCharge = replacementCharge;
      }
      /**
       * @return the replacementChargeAmount
       */
      @Column(name="RPLCHRAMT")
      public BigDecimal getReplacementChargeAmount() {
          return replacementChargeAmount;
      }
      /**
       * @param replacementChargeAmount the replacementChargeAmount to set
       */
      public void setReplacementChargeAmount(BigDecimal replacementChargeAmount) {
          this.replacementChargeAmount = replacementChargeAmount;
      }
      /**
       * @return the customerServiceKeycode
       */
      @Column(name="CUSSVCKEY")
      public String getCustomerServiceKeycode() {
          return customerServiceKeycode;
      }
      /**
       * @param customerServiceKeycode the customerServiceKeycode to set
       */
      public void setCustomerServiceKeycode(String customerServiceKeycode) {
          this.customerServiceKeycode = customerServiceKeycode;
      }
      /**
       * @return the restockPercent
       */
      @Column(name="RSKPCT")
      public BigDecimal getRestockPercent() {
          return restockPercent;
      }
      /**
       * @param restockPercent the restockPercent to set
       */
      public void setRestockPercent(BigDecimal restockPercent) {
          this.restockPercent = restockPercent;
      }
      /**
       * @return the enterpriseId
       */
      @Column(name="ETRID")
      public Integer getEnterpriseId() {
          return enterpriseId;
      }
      /**
       * @param enterpriseId the enterpriseId to set
       */
      public void setEnterpriseId(Integer enterpriseId) {
          this.enterpriseId = enterpriseId;
      }
      /**
       * @return the country
       */
      @Column(name="CRY")
      public String getCountry() {
          return country;
      }
      /**
       * @param country the country to set
       */
      public void setCountry(String country) {
          this.country = country;
      }
      /**
       * @return the returnCountry
       */
      @Column(name="RTNCRY")
      public String getReturnCountry() {
          return returnCountry;
      }
      /**
       * @param returnCountry the returnCountry to set
       */
      public void setReturnCountry(String returnCountry) {
          this.returnCountry = returnCountry;
      }
      /**
       * @return the phoneExtension
       */
      @Column(name="PHNEXT")
      public int getPhoneExtension() {
          return phoneExtension;
      }
      /**
       * @param phoneExtension the phoneExtension to set
       */
      public void setPhoneExtension(int phoneExtension) {
          this.phoneExtension = phoneExtension;
      }
      /**
       * @return the phoneType
       */
      @Column(name="PHNTYPCLF")
      public String getPhoneType() {
          return phoneType;
      }
      /**
       * @param phoneType the phoneType to set
       */
      public void setPhoneType(String phoneType) {
          this.phoneType = phoneType;
      }
      /**
       * @return the giftCardItemNumber
       */
      @Column(name="GFTCTFITM")
      public String getGiftCardItemNumber() {
          return giftCardItemNumber;
      }
      /**
       * @param giftCardItemNumber the giftCardItemNumber to set
       */
      public void setGiftCardItemNumber(String giftCardItemNumber) {
          this.giftCardItemNumber = giftCardItemNumber;
      }
      /**
       * @return the implementationStatus
       */
      @Column(name="IMPSTSFLG")
      @Type(type="yes_no")
      public boolean isImplementationStatus() {
          return implementationStatus;
      }
      /**
       * @param implementationStatus the implementationStatus to set
       */
      public void setImplementationStatus(boolean implementationStatus) {
          this.implementationStatus = implementationStatus;
      }
      /**
       * @return the defaultWebsiteId
       */
      @Column(name="DFTWEBID")
      public int getDefaultWebsiteId() {
          return defaultWebsiteId;
      }
      /**
       * @param defaultWebsiteId the defaultWebsiteId to set
       */
      public void setDefaultWebsiteId(int defaultWebsiteId) {
          this.defaultWebsiteId = defaultWebsiteId;
      }
      /**
       * @return the callTagFee
       */
      @Column(name="CTGFEEAMT")
      public BigDecimal getCallTagFee() {
          return callTagFee;
      }
      /**
       * @param callTagFee the callTagFee to set
       */
      public void setCallTagFee(BigDecimal callTagFee) {
          this.callTagFee = callTagFee;
      }
      /**
       * @return the warehouseRules
       */
      public WarehouseRules getWarehouseRules() {
          return warehouseRules;
      }
      /**
       * @param warehouseRules the warehouseRules to set
       */
      public void setWarehouseRules(WarehouseRules warehouseRules) {
          this.warehouseRules = warehouseRules;   
  }
  </code></pre>
  
  <p>My WarehouseRules class is as follows.</p>
  
  <pre><code>@Entity(name = "COBRLWHS")
  public class WarehouseRules implements Serializable {
      private static final long serialVersionUID = 1967521668154976367L;
  
      @OneToOne(mappedBy="warehouseRules")
      private Company company;
  
      @Id
      @Column(name = "BUSUNTNBR")
      private Integer businessUnit;
  
      @Column(name="ORDPTYCLF")
      private String orderPriority;
  
      @Column(name="WHSPPRCLF")
      private String warehousePaperwork;
  
      @Column(name="ENTCUTTIM")
      private Time entryCutoffTime;
  
      @Column(name = "RRLADLDAY")
      private Integer ruralDays;
  
      @Column(name = "SRRADLDAY")
      private Integer superRuralDays;
  
      @Column(name = "BOADLDAY")
      private Integer backorderDays;
  
      @Column(name = "DFTFRTTBL")
      private String freightTable;
  
      public void setId(Integer id) {
          setBusinessUnit(id);
      }
  
      /**
       * @return the businessUnit
       */
      public Integer getBusinessUnit() {
          return businessUnit;
      }
  
      /**
       * @param businessUnit the businessUnit to set
       */
      public void setBusinessUnit(Integer businessUnit) {
          this.businessUnit = businessUnit;
      }
  
      /**
       * @return the ruralDays
       */
      public Integer getRuralDays() {
          return ruralDays;
      }
  
      /**
       * @param ruralDays the ruralDays to set
       */
      public void setRuralDays(Integer ruralDays) {
          this.ruralDays = ruralDays;
      }
  
      /**
       * @return the superRuralDays
       */
      public Integer getSuperRuralDays() {
          return superRuralDays;
      }
  
      /**
       * @param superRuralDays the superRuralDays to set
       */
      public void setSuperRuralDays(Integer superRuralDays) {
          this.superRuralDays = superRuralDays;
      }
  
      /**
       * @return the backorderDays
       */
      public Integer getBackorderDays() {
          return backorderDays;
      }
  
      /**
       * @param backorderDays the backorderDays to set
       */
      public void setBackorderDays(Integer backorderDays) {
          this.backorderDays = backorderDays;
      }
  
      /**
       * @return the freightTable
       */
      public String getFreightTable() {
          return freightTable;
      }
  
      /**
       * @param freightTable the freightTable to set
       */
      public void setFreightTable(String freightTable) {
          this.freightTable = freightTable;
      }   
  
      /**
       * @return the orderPriority
       */
      public String getOrderPriority() {
          return orderPriority;
      }
  
      /**
       * @param orderPriority the orderPriority to set
       */
      public void setOrderPriority(String orderPriority) {
          this.orderPriority = orderPriority;
      }
  
      /**
       * @return the warehousePaperwork
       */
      public String getWarehousePaperwork() {
          return warehousePaperwork;
      }
  
      /**
       * @param warehousePaperwork the warehousePaperwork to set
       */
      public void setWarehousePaperwork(String warehousePaperwork) {
          this.warehousePaperwork = warehousePaperwork;
      }
  
      /**
       * @return the entryCutoffTime
       */
      public Time getEntryCutoffTime() {
          return entryCutoffTime;
      }
  
      /**
       * @param entryCutoffTime the entryCutoffTime to set
       */
      public void setEntryCutoffTime(Time entryCutoffTime) {
          this.entryCutoffTime = entryCutoffTime;
      }
  
  
  
      /**
       * @return the company
       */
      public Company getCompany() {
          return company;
      }
  
      /**
       * @param company the company to set
       */
      public void setCompany(Company company) {
          this.company = company;
      }
  
      public int hashCode() {
          final int prime = 31;
          int result = super.hashCode();
          result = prime * result
                  + ((businessUnit == null) ? 0 : businessUnit.hashCode());
          return result;
      }
  
  
      public boolean equals(Object obj) {
          if (this == obj)
              return true;
          if (!super.equals(obj))
              return false;
          if (getClass() != obj.getClass())
              return false;
          WarehouseRules other = (WarehouseRules) obj;
          if (businessUnit == null) {
              if (other.businessUnit != null)
                  return false;
          } else if (!businessUnit.equals(other.businessUnit))
              return false;
          return true;
      }
  }
  </code></pre>
  
  <p>When I try to run my code, I get the following exception: </p>
  
  <pre><code>org.hibernate.AnnotationException: Referenced property not a (One|Many)ToOne: com.oriental.comet.db2.company.entity.Company.warehouseRules in mappedBy of com.oriental.comet.db2.company.entity.WarehouseRules.company:org.hibernate.AnnotationException:Referenced property not a (One|Many)ToOne: com.oriental.comet.db2.company.entity.Company.warehouseRules in mappedBy of com.oriental.comet.db2.company.entity.WarehouseRules.company
      at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:248)
      at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1697)
      at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1426)
      at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
      at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857)
  </code></pre>
  
  <p>The only thing I can think of is the fact that both tables have the same column name for their ID? I can't change that though, so I don't know if there is a workaround (if that's truly the case) or if I'm missing something.</p>